【问题标题】:How to set a custom URL path for a controller without creating new routes?如何在不创建新路由的情况下为控制器设置自定义 URL 路径?
【发布时间】:2011-08-07 12:44:49
【问题描述】:

我想知道是否有属性(内置或一些开源)让我用我希望它使用的特定 URL 段标记我的控制器,如:

[MagicUrlRoute("status")]
public class InternalNameNotToBeRevealed : Controller
{
    public ActionResult Show()
    {
    ...
    }
}

这样,用户看到的不是“/InternalNameNotToBeRevealed/Show”,而是“/status/Show”。这可能是吹毛求疵,但麻烦的是我必须使用控制器类名作为官方 URL 路径。

现在,我明白我可以在 global.asax 上创建自定义路由,但这对于数百个控制器来说将是很多工作。

我发现这个非常方便的库可以做到这一点,但仅用于操作: http://maproutes.codeplex.com/releases/view/39888

感谢任何建议。

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    您可以拥有一个映射列表,然后在循环中调用 MapRoute 来注册所有自定义映射。映射可以是字典,或者您甚至可以在 App_Start 上扫描所有控制器一次,收集自定义属性值,然后使用这些值来构建映射。但是,我不确定它对大量映射的性能有多好。

    如果您想要更高性能的机制,则必须创建自己的 Route。您应该能够通过从 System.Web.Routing.RouteBase 继承并重载 GetRouteData 和 GetVirtualPath 来进行映射来做到这一点。在构建 RouteData 时,您可以只提供现有的 System.Web.Mvc.MvcRouteHandler 作为路由处理程序,并且只要您的路由数据包含“控制器”和“动作”值,它就应该继续沿着 MVC 管道。然后只需使用 RouteCollection 上的 Add 方法来添加您的路线。您可以查看 System.Web.Mvc.RouteCollectionExtensions 中的 MapRoute,了解 MVC 如何添加它的路由。

    【讨论】:

    • 谢谢。这似乎是要走的路,而且实施起来并不难。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    相关资源
    最近更新 更多