Проблема в GET маршруте в asp.net MVC бритвы c # - PullRequest
0 голосов
/ 24 ноября 2018

В моем коде всего 3 маршрута.

Если я меняю положение 1-го на 2-е, то 2-е начинает работать, но 1-е дает ошибку 404.

Я что-то не так делаю в приведенном ниже коде?

Это маршрут GET, и он отлично работает.

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}",
    defaults: new { 
                    controller = "Category", 
                    action = "Index", 
                    Category = UrlParameter.Optional 
                }
);

Это маршрут GET, который всегда выдает ошибку 404.

routes.MapRoute(
    name: "Default1",
    url: "{Category}",
    defaults: new { 
                    controller = "Product", 
                    action = "Index", 
                    Category = UrlParameter.Optional 
                }
);

Этоэто POST route и работает отлично.

routes.MapRoute(
    name: "Default_Without_Action",
    url: "{controller}/{action}/{Category}",
    defaults: new { 
                    controller = "Product", 
                    action = "GetProducts", 
                    Category = UrlParameter.Optional 
                }
);

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

Я проверил оба маршрута и работал нормально.

RouteConfig.cs

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


           //Route -1
           routes.MapRoute(
           name: "Default1",
           url: "{Category}",
           defaults: new { controller = "Product", action = "Index", Category = UrlParameter.Optional }
           );

           //Route - 2
            routes.MapRoute(
                name: "Default",
                //url: "{controller}/{action}/{id}",
                //defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                url: "{controller}/{action}/{Category}",
                defaults: new { controller = "Category", action = "Index", Category = UrlParameter.Optional }
            );
        }

При первом / первом запросе он совпадает с маршрутом-1 и вызывает индексМетод действия контроллера продукта, как показано на рисунке ниже.Причина - мы определили параметр по умолчанию для контроллера Products.

enter image description here

Если мы удалим параметр по умолчанию из маршрута 1, то по первому / первому запросу route-2Соответствия шаблону URL и будет вызван метод Index Action для контроллера категории. Причина - мы определили параметр по умолчанию для категории контроллера.

Ответ браузера с ошибкой 404, только если какой-либо запрос не совпадает с зарегистрированнымШаблон URL.

0 голосов
/ 24 ноября 2018

проверить, если вы введете URL: "{controller}" и посмотрите, работает ли это

routes.MapRoute(
    name: "Default1",
    url: "{controller}",
    defaults: new { 
                    controller = "Product", 
                    action = "Index", 
                    Category = UrlParameter.Optional 
                }
);
...