404 asp.net mvc - вопрос новичка в маршрутизации - PullRequest
1 голос
/ 19 марта 2010

Это вопрос начального уровня для asp.net MVC

У меня есть следующий код в global.asax.cs

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

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



        }

в Homecontroller.cs я обновил метод индекса следующим образом

public ActionResult Index(string id)
        {
            ViewData["Message"] = "Welcome to ASP.NET MVC1!"+ id;

            return View();
        }

Насколько я понимаю, если я дам URL http://localhost/mvc1/default/1, он должен работать

вместо этого выдает ошибку 404

любая помощь, что является причиной этого

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Я предполагаю, что ваше приложение называется "mvc1", и это корень вашего проекта. Если это так:

Таким образом, "default" - это имя вашего маршрута, а не имя действия. По сути, механизм маршрутизации ищет контроллер и действие, совпадающее с поступающими запросами. При заданном вами маршруте он сломался бы так:

http://localhost/MVCApplication1/default/1
                                 (cont)  (action)

Если определенные части маршрута пропущены, он попытается заполнить пропущенные значения указанными вами значениями по умолчанию. Как видите, в вашем проекте нет контроллера с именем DefaultController, и поэтому он использует заданное вами значение по умолчанию Home. Затем он пытается найти метод действия с именем default и снова терпит неудачу, поэтому он использует в маршруте значение по умолчанию, равное Index. Наконец, у вас есть 2 сегмента в вашем URL, и ни один маршрут не соответствует этому шаблону (2 сегмента после действия), поэтому он не может найти нужное место.

Что вам нужно сделать, это удалить один из ваших сегментов, и это должно работать. Маршрутизация может быть немного сложнее, поэтому я бы порекомендовал почитать ее.

1 голос
/ 19 марта 2010

Запрашиваемый вами URL запрашивает контроллер с именем "mvc1" и действие с именем "default", которое получит идентификатор "1". Поскольку у вас нет контроллера с именем "mvc1" (я полагаю?), Вы получаете ошибку 404.

Значения по умолчанию для контроллера и действия используются, только если не указаны контроллер и действие. Поскольку вы предоставили контроллер и действие, MVC ищет их специально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...