ASP.NET MVC路由 - 使用可选参数和友好URL进行路由

时间:2012-10-29 18:24:58

标签: asp.net asp.net-mvc asp.net-mvc-routing

我有一个搜索操作方法,此时会接受5个搜索条件的可选参数。 我的主页有一个快速搜索按钮,用于向搜索操作方法提交GET请求。我拥有了一切 工作正常,但我的网址是使用标准的查询字符串语法生成的(?x = x& y = y)。

我想公开友好的网址,但我认为使用路由系统的唯一方法是 添加每个单独的排列,因为所有参数都是可选的,听起来不是很好 优雅。

那么有没有其他路线(没有双关语:) :)我可以采取?可能是Url重写模块吗?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

选项1 :与查询字符串一起生活。友情网址在搜索页面上没什么了不起的。

/search?q=url+routing

选项2 :允许最多一个可选参数成为“友好”网址的一部分。必须在查询字符串中传递任何其他参数。例如:

/search/query/url+routing (1 parameter)
/search/query/url+routing?tagged=asp.net (2 parameters)
/search/query/url+routing?tagged=asp.net&sort=date (3 parameters)

答案 1 :(得分:0)

如果您使用http://mysite.com/search/{term-1}/{term-n}/{term-n+1}等网址,则可以设置路线:

routes.MapRoute(
    name: "SearchRoute",
    url: "search/{*terms}",
    defaults: new { controller = "MySearchController", action = "MySearchAction" }
);

在您的操作中,您将收到一个字符串,该字符串将/与您的所有搜索字词分隔开来。 (URL可能没有多大意义,但您可以使用它。)

public class SearchController : Controller
{
    public ActionResult SearchAction (string terms)
    {
        foreach (var term in terms.Split ('/'))
        {
            // Do something
        }
    }
}