Как изменить текст контроллера в URL-адресе ASP.NET MVC? - PullRequest
3 голосов
/ 23 апреля 2009

Недавно меня попросили изменить небольшое приложение asp.net mvc, чтобы имя контроллера в URL содержало тире. Например, когда я создал контроллер с именем ContactUs с представлением с именем Index и Sent, URL-адреса будут http://example.com/ContactUs и http://example.com/ContactUs/Sent. Человек, который попросил меня внести изменение, хочет, чтобы URL-адреса были http://example/contact-us и http://example.com/contact-us/sent.

Я не верю, что могу изменить имя контроллера, потому что '-' будет недопустимым символом в имени класса.

Я искал атрибут, который мог бы применить к классу контроллера, который позволил бы мне указать строку, в которой контроллер будет использовать int url, но я еще не нашел ее.

Как мне это сделать?

Ответы [ 4 ]

9 голосов
/ 23 апреля 2009

Просто измените URL, используемый в самом маршруте, чтобы он указывал на существующий контроллер. В вашем Global.asax:

routes.MapRoute(
  "Contact Us",
  "contact-us/{action}/",
  new { controller = "ContactUs", action = "Default" }
);
2 голосов
/ 23 апреля 2009

Я не верю, что вы можете изменить отображаемое имя контроллера. В бета-версии контроллер был создан с использованием данных о маршруте «controller» с суффиксом «Controller». Возможно, это изменилось в RC / RTM, но я не уверен.

Если вы создаете собственный маршрут «contact-us / {action}» и указываете значение по умолчанию: new { controller = "ContactUs" }, вы должны получить результат, который вам нужен.

1 голос
/ 23 апреля 2009

Вам необходимо настроить маршрутизацию. В вашем Global.asax сделайте следующее:

public static void RegisterRoutes(RouteCollection routes)
{
  ...
  routes.MapRoute(
    "route-name", "contact-us/{action}", // specify a propriate route name...
    new { controller = "ContactUs", action = "Index" }
  );
  ...

Как отметил Ричард Сзалай, действие sent указывать не нужно. Если в URL пропущена часть .../sent, по умолчанию используется действие Index.

Обратите внимание, что порядок маршрутов имеет значение при добавлении маршрутов в RouteCollection. Первый подобранный маршрут будет выбран, а остальные будут игнорироваться.

0 голосов
/ 23 апреля 2009

Один из разработчиков ASP.NET MVC рассказывает о том, что говорит Iconic. Это было то, на что я смотрел сегодня, на самом деле на взломанном . Стоит проверить наличие пользовательских маршрутов в вашей архитектуре MVC.

РЕДАКТИРОВАТЬ : Я вижу, вы могли бы использовать пользовательские маршруты, но это, вероятно, не лучшее решение в этом случае. Разве есть способ разобраться с {controller} перед его отображением? Если бы это было возможно, вы могли бы заменить все символы "-".

...