ASP.NET маршрутизация MVC не работает

моя маршрутизация работает неправильно. У меня определены следующие маршруты:

routes.MapRoute(
     name: "CategoryDetails",
     url: "{seoName}",
     defaults: new { controller = "Category", action = "Details" }
);

routes.MapRoute(
     name: "ContactUs",
     url: "contact",
     defaults: new { controller = "Home", action = "Contact" }
);

routes.MapRoute(
     name: "AboutUs",
     url: "about",
     defaults: new { controller = "Home", action = "About" }
);

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

когда я нажимаю на ссылки о нас или свяжитесь с нами, то это приводит меня к методу действия деталей в контроллере категории.

это разметка для моего о нас и свяжитесь с нами ссылки:

@Html.ActionLink("About", "About", "Home")
@Html.ActionLink("Contact", "Contact", "Home")

мои данные метод действия для контроллера категории:

public ActionResult Details(string seoName)
{
     CategoryViewModel model = categoryTask.Details(seoName);

     return View(model);
}

что не так с моей конфигурации трассы?

4 ответов


переупорядочить маршруты от наиболее конкретных до менее конкретных. Таким образом, маршруты для контакта и около будут приходить до маршрута seoName:

routes.MapRoute(
        name: "ContactUs",
        url: "contact",
        defaults: new { controller = "Home", action = "Contact" }
);

routes.MapRoute(
        name: "AboutUs",
        url: "about",
        defaults: new { controller = "Home", action = "About" }
);

routes.MapRoute(
        name: "CategoryDetails",
        url: "{seoName}",
        defaults: new { controller = "Category", action = "Details" }
);

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

С вашим первоначальным заказом, urls~/contact и ~/about всегда будет обрабатываться маршрутом seoName. Переупорядочивая их, вы убедитесь, что они обрабатываются правильными действиями в HomeController и маршрут seoName будет соответствовать только url-адресу после того, как контакт и о маршрутах не совпали.


сначала определяется маршрут CategoryDetails. Вот почему он соответствует, например, url"http://server/AboutUs "(seoName будет присвоено "AboutUs"). Сначала должны быть определены наиболее конкретные маршруты (AboutUs, ContactUs).


следующее вызывает проблему для вас. пожалуйста, прокомментируйте его или поместите внизу.

routes.MapRoute(
     name: "CategoryDetails",
     url: "{seoName}",
     defaults: new { controller = "Category", action = "Details" }
);

Initally Defualt маршрут работает, и вы принимаете HomeControllers Indeax действие.

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

попробуйте добавить следующую строку в controller и view . чтобы вы поняли, как и куда вы идете неправильно!--4-->

public ActionResult Details(string seoName)
    {
        ViewBag.ValueReceived = seoName;
        return View();
    } 

и

<h1>@ViewBag.ValueReceived</h1>

при нажатии контакта или детали url будет напоминать

http://arunkumar.com:62115/about

здесь " о " рассматривается как значение для seoName, и выбрана неправильная маршрутизация


у меня была аналогичная ошибка, я ставил

HttpPost("/route")
вместо
HttpPost("route")