2012-10-29 86 views
1

我有一个搜索操作方法,它在此时接受5个可选参数作为其搜索条件。 我的主页有一个快速搜索按钮,它将GET请求提交给搜索操作方法。我有一切 工作正常,但我的网址是使用标准查询字符串语法生成的(?x = x & y = y)。ASP.NET MVC路由 - 使用可选参数和友好URL进行路由

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

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

任何帮助将不胜感激。

回答

0

选项1:住querystrings。搜索页面上的友好Url没有什么特别的。

/search?q=url+routing 

选项2:允许至多有一个可选的参数是“友好”的URL的一部分。任何其他参数都必须在querystrings中传递。例如:

/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) 
+0

我想我会用查询字符串。谢谢。 – Marco

0

您可以设置,如果您能够接受这样的URL http://mysite.com/search/{term-1}/{term-n}/{term-n+1}路线:

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

在你的行动,你会采取将被/分隔的字符串与您的所有搜索字词。 (网址可能没有太大意义,但它可以使用。)

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

感谢您的建议。 – Marco