Я создаю приложение ASP.NET MVC. В настоящее время мои ссылки выглядят так:
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904
/Service/Offer/767619da-c5e6-e511-948f-005056e529a5
Хотелось бы, чтобы они выглядели так:
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/campain-user-friendly-text-taken-from-the-db
/Service/Offer/767619da-c5e6-e511-948f-005056e529a5/service-user-friendly-text-taken-from-the-db
Это означает, что при доступе к
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/
вы должны получить 301 и будете перенаправлены на/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/campain-user-friendly-text-taken-from-the-db
Кроме того, когда вы отправляете сообщение на
/Campaign/Overview/996e19da-c5e6-e511-948f-005056822904/campain-user-friendly-text-taken-from-the-db
и в методе, который вы делаетеreturn View(vm);
, он должен сохранить этот URL.И последнее, но не менее важное: когда вы используете @ Html.ActionLink («Щелкните здесь», «Обзор», «Кампания»), я хотел бы, чтобы он создавал ссылку с удобным для пользователя текстом (который будет чем-то другим в случае кампании и сервис).
Какое самое простое решение того, что я хочу? Я могу думать о вещах, которые я могу сделать с помощью маршрутизации и некоторых расширений htmlHelper, но мне кажется, что я делаю это слишком сложным и изобретаю колесо. Я?
Здесь задан похожий вопрос: Как создать удобные для пользователя URL-адреса, такие как stackoverflow ?, но он не отвечает на мой вопрос.
FilterAttribute
мог работать только тогда, когда имя вашего контроллера точно совпадало с именем вашей таблицы (или, по крайней мере, с каким-то соглашением, чтобы вы могли сопоставить их) и вызвать некоторый общий методGetSlug(Guid ID)
. - person   schedule 18.03.2016protected IRepository<TEntity> Repository
, тогда вы сможете использовать что-то вродеstring slug = filterContext.Controller.Repository.GetSlug(filterContext.ActionParameters["ID"]);
- person   schedule 18.03.2016