Неправильная маршрутизация ASP.NET MVC - PullRequest
0 голосов
/ 07 февраля 2012

Не знаю, почему у меня такие проблемы с маршрутизацией ASP.NET MVC.Хотелось бы, чтобы был инструмент, который показал мне, какие маршруты я настроил в настоящее время.Независимо от этого,

В моем файле global.asax.cs у меня есть следующее:

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
    "SignUp", // Route name
    "account/{controller}/{action}", // URL with parameters
    new { controller = "Home", action = "Register" } // Parameter defaults
  );

  routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  );
}

У меня есть следующее определение в HomeController.cs

public ActionResult Register()
{
  return View();
}

Яожидая возможности доступа к этой странице, посетив / account / register в моем браузере.Тем не менее, я продолжаю получать 404. Что я делаю не так?

Ответы [ 3 ]

3 голосов
/ 07 февраля 2012

/Account/Register соответствует вашему первому маршруту.

Слово Register соответствует {controller}, поэтому оно ищет контроллер с именем RegisterController.

1 голос
/ 07 февраля 2012

замените

routes.MapRoute(
    "SignUp", // Route name
    "account/{controller}/{action}", // URL with parameters
    new { controller = "Home", action = "Register" } // Parameter defaults
  );

на

routes.MapRoute(
    "SignUp", // Route name
    "account/{action}", // URL with parameters
    new { controller = "Home" } // Parameter defaults
  );

Это будет означать, что /account/register будет направлено к действию Register на контроллере Home.Это также будет означать, что ссылки действий и другие ссылки, которые вы генерируете через @Html.ActionLink("Register", "Register", "Home"), будут генерировать URL /account/register

. Думайте о «URL с параметрами» как о шаблоне, с которым будет сопоставляться URL.

Проблема с вашей исходной картой маршрутов в том, что она ищет URL-адрес, подобный этому /account/controllername/actionname.Итак, когда вы идете /account/register - он принимает register в качестве имени контроллера и принимает имя действия по умолчанию (в данном случае регистр) - и в качестве действия «регистр» не существует в контроллере «регистр» -вы получаете 404.

ОБНОВЛЕНО Я обновил предложенный маршрут согласно комментариям Роберта.

Стоит также отметить, как утверждает Роберт, что все это моглосделать его более простым, сделав контроллер «Account» и перенеся туда действие «Register».Затем вы можете удалить маршрут SignUp и просто использовать маршрутизацию по умолчанию.Если вы подумали об этом, вы бы согласились, что это было бы лучшим местом для действия «Регистрация», чем контроллер «Домой».

0 голосов
/ 07 февраля 2012

Попробуйте использовать этот пакет самородков http://nuget.org/packages/Glimpse.Mvc3 Вы можете найти больше информации о проблеск на http://getglimpse.com/

...