ASP.NET MVC路由无法正常工作

Bre*_*ogt 8 c# asp.net asp.net-mvc asp.net-mvc-4

我的路由无法正常工作.我定义了以下路线:

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 }
);
Run Code Online (Sandbox Code Playgroud)

当我点击关于我们或联系我们的链接时,它会转到类别控制器中的详细操作方法.

这是关于我们的标记,请联系我们链接:

@Html.ActionLink("About", "About", "Home")
@Html.ActionLink("Contact", "Contact", "Home")
Run Code Online (Sandbox Code Playgroud)

我的类别控制器的详细操作方法:

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

     return View(model);
}
Run Code Online (Sandbox Code Playgroud)

我的路线配置有什么问题?

Dan*_*.G. 32

将您的路线从最具体到特定的重新排序.这样,联系和约的路线将在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 }
);
Run Code Online (Sandbox Code Playgroud)

有了您的原始订单,这些网址~/contact~/about总是由seoName途径处理.通过对它们进行重新排序,您可以确保它们通过正确的操作来处理,HomeController并且seoName路由将仅在联系后与URL匹配且路由无法匹配.