允许在asp.net mvc 2控制器名称的URL中使用连字符

时间:2011-03-12 08:19:58

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

[ActionName("about-us")]
public ActionResult EditDetails(int id)
{
    // your code
}

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

5 个答案:

答案 0 :(得分:7)

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

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

我之前没有看到类似的控制器名称属性,尽管它可能。

答案 1 :(得分: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

答案 2 :(得分:0)

也许这有效:

public class CustomControllerFactory : DefaultControllerFactory {

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

答案 3 :(得分:0)

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

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 }

答案 4 :(得分:0)

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

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