【问题标题】:How do you handle a variable number of MVC routes?你如何处理可变数量的 MVC 路由?
【发布时间】:2009-03-05 08:52:29
【问题描述】:

我在 ASP.NET MVC 中注意到这个有趣的地方:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

我想将 {*pathInfo} 映射到路线中。

类似:

routes.MapRoute(
  "area/{*pathInfo}",
   "{controller}/{action}/{id}",parameters
   new { controller = "Area", action = "Index", id = ??? } 
);

但是如何从 mydomain.com/area/foo/bar/rab/oof 传入变量“foo/bar/rab/oof”?将整个位作为字符串或作为集合传递对我来说都可以。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    您使用的是哪个 MVC 版本?我记得在 MCV Beta 中,路线名称应该是 MapRoute() 的第一个参数。无论如何,鉴于您捕获路径的目标,我会这样做:

    routes.MapRoute("AreaRoute", "Area/{*values}", new {controller = "Area", action = "Index"}       );
    

    在区域控制器中:

    // "value" argument is the string after Area/, i.e. "foo/bar/rab/oof" in your example
    public string Index(string values)  
    {  
      ...
    }
    

    【讨论】:

    • 感谢您的快速回复。我正在使用RC2。我会对此进行测试并回复您。
    • 一旦我确定这个模式是在默认路由模式之前注册的(在其他地方准备好了,但在尝试这个时完全忘记了它!)你的解决方案完美运行。非常感谢。
    • 它确实有帮助,对于 /area/1 和 /area/1/2 .. 但是一旦我尝试 /area/1/2/3 作为我的 url 模式,该页面的所有后续请求(即 /Scripts/jquery.js)也被发送到我的区域控制器。我尝试在此之上添加一个明确的模式,但它仍然会发生。还有什么想法吗?
    • 我一问就明白了。我的脚本参考是“../../Scripts/foo.js”。一旦我做了“/Scripts/foo.js”,它又开始工作了。路由逻辑存在问题,因为行为因上下文而异,但不应与 Area/* 的 Scripts/* 匹配。
    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 2020-06-13
    • 2017-03-29
    • 2017-04-06
    • 2011-01-08
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多