1

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

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

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

任何帮助将不胜感激。

4

2 回答 2

0

选项 1:使用查询字符串。搜索页面上的友好 URL 并没有什么好处。

/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)
于 2012-10-29T20:51:31.727 回答
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
        }
    }
}
于 2012-10-29T21:03:18.530 回答