未传递 MVC 路由参数
MVC Routing Parameter Not Being Passed
我正在按照在线教程尝试进行一些 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 }
);
}
这个URL有效:/news/index/?slug=test-news-title
但是这个URL不会:/news/index/test-news-title
=== 进一步编辑 ===
看来我的子域路由有问题。如果我删除子域路由,它工作正常。
谢谢。
您缺少 MapRoute
中的操作部分
routes.MapRoute(
"News",
"{controller}/{action}/{url}",
new { controller = "News", action = "Index", url = "" }
);
希望对您有所帮助
很有可能,您的路线太宽泛了。但这取决于其余路由的配置方式。您需要 post 您的整个路由配置(包括区域路由和属性路由),以便合理地得到您的路由问题的答案。
但是,您可以更具体地说明这条路线,因为您知道它需要以 /News
开头。
routes.MapRoute(
"News",
"News/{url}",
new { controller = "News", action = "Index" }
);
此外,通过提供默认值使 URL 参数可选可能没有意义。如果删除 url = ""
,URL 中需要 url
参数。如上配置,如果你只传/News
,是不会匹配这条路由的。然而,正如你所拥有的,这个 URL 将匹配。
最后,确保这条路线的顺序正确。它应该放在 之前 你的默认路线(如果你还有它的话)。
您已经为参数 url 设置了空字符串。你应该改用 UrlParameter.Optional (如果是强制性的,则完全删除它):
routes.MapRoute(
"News",
"{controller}/{url}",
new { controller = "News", action = "Index", url = UrlParameter.Optional }
);
我正在按照在线教程尝试进行一些 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 }
);
}
这个URL有效:/news/index/?slug=test-news-title
但是这个URL不会:/news/index/test-news-title
=== 进一步编辑 ===
看来我的子域路由有问题。如果我删除子域路由,它工作正常。
谢谢。
您缺少 MapRoute
routes.MapRoute(
"News",
"{controller}/{action}/{url}",
new { controller = "News", action = "Index", url = "" }
);
希望对您有所帮助
很有可能,您的路线太宽泛了。但这取决于其余路由的配置方式。您需要 post 您的整个路由配置(包括区域路由和属性路由),以便合理地得到您的路由问题的答案。
但是,您可以更具体地说明这条路线,因为您知道它需要以 /News
开头。
routes.MapRoute(
"News",
"News/{url}",
new { controller = "News", action = "Index" }
);
此外,通过提供默认值使 URL 参数可选可能没有意义。如果删除 url = ""
,URL 中需要 url
参数。如上配置,如果你只传/News
,是不会匹配这条路由的。然而,正如你所拥有的,这个 URL 将匹配。
最后,确保这条路线的顺序正确。它应该放在 之前 你的默认路线(如果你还有它的话)。
您已经为参数 url 设置了空字符串。你应该改用 UrlParameter.Optional (如果是强制性的,则完全删除它):
routes.MapRoute(
"News",
"{controller}/{url}",
new { controller = "News", action = "Index", url = UrlParameter.Optional }
);