如何制作适用于我所有控制器的路径"{controller}/{action}/paramname/paramvalue/..."?

Chr*_*all 3 url-routing asp.net-mvc-3

正如标题所述,我希望我的MVC网站有一个类似的URL模式

/Products/Category/Books/Sku/123456
Run Code Online (Sandbox Code Playgroud)

其他每个url段都是/ name参数名称及其值的值.

我怎样才能做到这一点?

Ale*_*yev 10

ASP.NET路由允许在路由掩码的末尾定义catchall参数:

routes.MapRoute(
    "CategoryWithParameters", 
    "Products/Category/{category}/{*parameters}", 
    new { controller = "Home", action = "Index" } 
);
Run Code Online (Sandbox Code Playgroud)

所以这个Home控制器方法

public ActionResult Index(string category, string parameters)
{
    // slashes were ignored by routing system
    string[] parts = parameters.Split('/');

    Dictionary<string, string> values = new Dictionary<string, string>();

    // we want only keys with values 
    for (int i = 0; i < parts.Length / 2 * 2; i += 2)
        values[parts[i]] = parts[i + 1];

    ViewBag.category = category;
    ViewBag.parameters = parameters;
    ViewBag.values = values;

    return View();
}
Run Code Online (Sandbox Code Playgroud)

而这个观点

<p>
@ObjectInfo.Print(ViewBag.category)
</p>
<p>
@ObjectInfo.Print(ViewBag.parameters)
</p>
<p>
@ObjectInfo.Print(ViewBag.values)
</p>
Run Code Online (Sandbox Code Playgroud)

渲染网址h**p:// localhost:32690/Products/Category/Books/Sku/123456/Bro/098765/df/34 to

渲染视图