Возврат 404, если URL не содержит индекс - PullRequest
0 голосов
/ 26 августа 2018

У меня проблемы с маршрутизацией в MVC.Я создал контроллер для своей страницы контактов, но если я не укажу маршрут как /contact/index, он вернет 404. Я не могу понять, почему он не может найти представление только с /contact в URL.Мой RouteConfig выглядит хорошо для меня.

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

            routes.MapRoute(
                name: "T",
                url: "T/{action}",
                defaults: new { controller = "Home", action = "Index" }
            );

            routes.MapRoute(
                name: "Holding",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Holding", id = UrlParameter.Optional }
            );

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

Единственная причина, по которой я вижу, что он не находит свой вид, - это новый маршрут, который я настроил для отображения страницы, содержащей сайт.Интересно, что /t отображает домашнюю страницу 'demo', поэтому я не понимаю, почему ей не нравится просто /contact.

Эта SO статья сказала мне, что я могу исправитьпроблема в том, чтобы дать ей свой собственный MapRoute, но мне не нужно было все это делать?

public class HomeController : Controller
{
     public ActionResult Index()
     {
        return View();
     }

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

public class ContactController : Controller
{
    // GET: Contact
    public ActionResult Index()
    {
        return View();
    }
}

Это должно быть что-то глупое, но я не могу решить это.

1 Ответ

0 голосов
/ 26 августа 2018

У вас есть конфликты маршрутов

/contact будет соответствовать

routes.MapRoute(
    name: "Holding",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Holding", id = UrlParameter.Optional }
);

Но поскольку у контроллера контактов нет действия Holding, вы получите 404 Not Found

И поскольку он соответствует маршруту Holding , он не перейдет к следующему маршруту По умолчанию , когда выиграет первый матч.

Добавленный маршрут слишком общий, поэтому в нем будет много ложных совпадений.

На основе показанных контроллеров добавленный маршрут не требуется. путь удержания будет соответствовать шаблону маршрута по умолчанию. Так что на самом деле его можно полностью удалить.

...