MVC路由,查询参数

时间:2011-10-20 01:18:59

标签: asp.net-mvc asp.net-mvc-3 routes

两个简单的mvc3路由,用户名和默认捕获全部。

routes.MapRoute(
    "Users", 
    "{username}",  
    new { controller = "User", action = "Index"} 
);

routes.MapRoute(
    "Default", 
    "{*url}", 
    new { controller = "Default", action = "Index" }  
);

如何让用户路由接受任何额外的查询参数,例如/ username?ref = facebook 这个例子只是默认路线...

编辑: 我很不好意思,因为它不应该关心查询参数。 解决方案=清理并重建项目。

3 个答案:

答案 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约定优于配置指南并匹配操作中的查询字符串参数。