我正在尝试按照在线教程进行一些MVC路由,但由于某种原因,路由无法正常工作。
我正在尝试http://www.website.com/news/news-title
我想要做的路线如下。
routes.MapRoute(
"News",
"{controller}/{url}",
new { controller = "News", action = "Index", url = "" }
);
在我的NewsController中,我有以下ActionResult。
public ActionResult Index(String url)
{
return View();
}
但是,当踩到代码时,url不会被填充。
由于
==更新==
谢谢大家的回复。
我没有修改下面的路线
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.LowercaseUrls = true;
routes.Add(new SubdomainRoute());
routes.MapRoute(
"News",
"News/{action}/{slug}",
new { controller = "News", action = "Index" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
此网址有效:/news/index/?slug=test-news-title
但此网址不会:/news/index/test-news-title
===进一步编辑===
看来我的子域路线正在弄乱它。如果我删除子域路由它可以正常工作。
感谢。
答案 0 :(得分:1)
最有可能的是,您的路线过于宽泛。但这取决于其他路由的配置方式。您需要发布整个路线配置(包括区域路线和属性路线),以便合理地得到您路线的错误答案。
但是,您可以更加具体地了解此路线,因为您知道它需要以/News
开头。
routes.MapRoute(
"News",
"News/{url}",
new { controller = "News", action = "Index" }
);
此外,通过提供默认值使URL参数可选是没有意义的。如果您删除url = ""
,则网址中需要url
参数。如果配置如上,如果您只是通过/News
,则它不会匹配此路线。但是,正如您所拥有的那样,此URL将匹配。
最后,确保此路线按正确的顺序排列。它应该放在之前你的默认路线(如果你还有它)。
答案 1 :(得分:0)
您错过了MapRoute
routes.MapRoute(
"News",
"{controller}/{action}/{url}",
new { controller = "News", action = "Index", url = "" }
);
希望这个帮助
答案 2 :(得分:0)
您已为参数url设置空字符串。你应该使用UrlParameter.Optional(如果是强制性的话,可以删除它):
routes.MapRoute(
"News",
"{controller}/{url}",
new { controller = "News", action = "Index", url = UrlParameter.Optional }
);