C# ASP.NET MVC路由不工作

C# ASP.NET MVC路由不工作,c#,asp.net,asp.net-mvc,asp.net-mvc-4,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 { contr

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

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);
}

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

首先定义CategoryDetails路线。这就是它与url“
http://server/AboutUs
“(seoName将被分配为“AboutUs”)。应首先定义最具体的路线(AboutUs、ContactUs)。

将路线从最具体的路线重新排序为不太具体的路线。这样一来,联系路线和往返路线将先于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 }
);

按照原始顺序,URL
~/contact
~/about
将始终由seoName路由处理。通过对它们重新排序,您可以确保它们由
HomeController
中的正确操作处理,并且seoName路由将仅在联系人和关于路由无法匹配后匹配url

以下是导致您出现问题的原因。请将其注释掉或放在底部

routes.MapRoute(
     name: "CategoryDetails",
     url: "{seoName}",
     defaults: new { controller = "Category", action = "Details" }
);
从一开始,解除警报的路线是有效的,你会在紧急行动中被带回家

当您单击任何链接时。路由引擎与第一个匹配。将采用管线定义中指定的默认值

尝试在控制器和视图中添加以下行。这样你就会明白你是怎么错的,是怎么错的

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

<h1>@ViewBag.ValueReceived</h1>
@ViewBag.ValueReceived
单击联系人或详细信息时,url将显示为


这里的“about”被认为是seoName的值,并且选择了错误的路由

HttpPost("/route") HttpPost("route")
HttpPost(“路由”)很好地解释了如何调试并得出正确的结论,以及OP想要的答案。