【问题标题】:allow hyphens in URLs for asp.net mvc 2 controller names允许在 asp.net mvc 2 控制器名称的 URL 中使用连字符
【发布时间】:2011-07-13 23:31:19
【问题描述】:
[ActionName("about-us")]
public ActionResult EditDetails(int id)
{
    // your code
}

上述操作适用于操作,但我希望能够对控制器执行相同(或类似)操作,即 URL 名称中也有连字符。有没有简单的方法来实现这一点(我尝试了 ActionName 属性但没有运气)

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 asp.net-mvc-routing asp.net-mvc-controller


    【解决方案1】:

    最简单的方法是添加自定义路线:

    routes.MapRoute("RouteName", "controler-name/{action}/{id}", new { controller = "ControllerName", action = "Index", id = "" });
    

    我以前没有见过这样的控制器名称属性,尽管它可能是可能的。

    【讨论】:

      【解决方案2】:

      也许这行得通:

      public class CustomControllerFactory : DefaultControllerFactory {
      
         protected override Type GetControllerType(RequestContext requestContext, string controllerName) {
            return base.GetControllerType(requestContext, controllerName.Replace("-", ""));
         }
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用自定义路由处理程序来为您提供所需的功能:

        public class HyphenatedRouteHandler : MvcRouteHandler
        {
            protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
                requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
        
                return base.GetHttpHandler(requestContext);
            }
        }
        

        并且应该使用该处理程序注册路由:

        var route = routes.MapRoute(
            "Some Action",
            "{controller}/{action}/{id}"
        );
        
        route.RouteHandler = new HyphenatedRouteHandler();
        

        这里有一个类似的问题:ASP.net MVC support for URL's with hyphens

        【讨论】:

          【解决方案4】:

          路由表中的连字符路由应该在默认路由之前。

          routes.MapRoute(
                            "InformationAbout", 
                            "information-about/{action}/{id}", 
                             new { controller = "InformationAbout", action = "Index", id = "" }
                          );
          
           routes.MapRoute(
                          "Default", // Route name
                          "{controller}/{action}/{id}", // URL with parameters
                          new { controller = "Home", action = "Index", id = UrlParameter.Optional }
          

          【讨论】:

            【解决方案5】:

            也许这里是问题的正确答案。所有其他都是适用于单个 url 的解决方法,但这是一种通用方法

            http://blog.didsburydesign.com/2010/02/how-to-allow-hyphens-in-urls-using-asp-net-mvc-2/

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-01-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-02-12
              • 2016-01-25
              • 1970-01-01
              • 2010-10-23
              相关资源
              最近更新 更多