asp.net-mvc-3 - 如何创建适用于我所有 Controller 的路由 "{controller}/{action}/paramname/paramvalue/..."?

标签 asp.net-mvc-3 url-routing

正如标题所述,我希望我的 MVC 站点具有如下 URL 模式

/Products/Category/Books/Sku/123456

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

我该怎么做?

最佳答案

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

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

所以这个家庭 Controller 方法

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();
}

和这个 View

<p>
@ObjectInfo.Print(ViewBag.category)
</p>
<p>
@ObjectInfo.Print(ViewBag.parameters)
</p>
<p>
@ObjectInfo.Print(ViewBag.values)
</p>

渲染 URL h**p://localhost:32690/Products/Category/Books/Sku/123456/Bro/098765/df/34 至

rendered view

关于asp.net-mvc-3 - 如何创建适用于我所有 Controller 的路由 "{controller}/{action}/paramname/paramvalue/..."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157266/

相关文章:

javascript - 如何在 Javascript/JQUery 中将返回的 JSON 对象整形为数组?

c# - 获取密码时的字符串比较

Codeigniter 路由无限参数

react-native - 场景、选项卡 (react-native-router-flux) 和图标 (react-native-vector-icons)

asp.net-mvc - 如何确保 POST 上的小写 URL?

javascript - AngularJS ui-router 模板未加载

asp.net - View 模型上的类型更改后, Razor View 上出现 MissingMethodException

jQuery ui 对话框不在 ASP.NET MVC 3 应用程序中使用 site.css

entity-framework - MapSingleType 错误

javascript - 具有可选 '/' 和查询参数的主干路由