两个简单的mvc3路由,用户名和默认捕获全部。
routes.MapRoute(
"Users",
"{username}",
new { controller = "User", action = "Index"}
);
routes.MapRoute(
"Default",
"{*url}",
new { controller = "Default", action = "Index" }
);
如何让用户路由接受任何额外的查询参数,例如/ username?ref = facebook 这个例子只是默认路线...
编辑: 我很不好意思,因为它不应该关心查询参数。 解决方案=清理并重建项目。
答案 0 :(得分:0)
更新您的第一条路线如下:
routes.MapRoute(
"Users",
"/username",
new { controller = "User", action = "Index"}
);
在你的控制器中添加一个参数" ref"这样MVC就会自动传递查询字符串" ref"到你的控制器。
答案 1 :(得分:0)
将参数添加到路线中,不要忘记将其添加到您的操作中。 我建议在URL的开头添加一些内容以使其更具体一些(如果您向项目添加任何其他路由) 实施例
routes.MapRoute(
"Users",
"users/{username}/{ref}",
new { controller = "User", action = "Index", ref = UrlParameter.Optional }
);
并且在你的行动中你想要
public ActionResult Index(ref)
{
if (string.IsNullOrEmpty(ref))
{
//TODO: add your logic here
}
}
这应该接受/users/someusername/facebook.com或/users/someusername?ref=facebook.com
答案 2 :(得分:0)
?ref=
等查询字符串参数不属于Route段定义。例如,路线llike:
routes.MapRoute(
"Default",
"{controller}/{action}",
new { controller = "Home", action = "Index"}
);
仍会匹配以下网址:/Home/Index?ref=facebook
。
因此,您无需更改路由以容纳即席查询字符串。在您的操作/控制器中处理它们是一个不同的故事,因为您必须遵循CoC约定优于配置指南并匹配操作中的查询字符串参数。