更改ASP.NET MVC 3控制器路由行为

问题描述

| 假设我有一些带有长名称的控制器,例如VeryLongNameController。 默认情况下,ASP.NET MVC3将〜/ VeryLongName或〜/ verylongname映射到此控制器。但是,我不喜欢在URL中使用大写字母,而是希望它映射所有长名称的控制器,例如〜/ very-long-name。 我知道可以一一添加自定义路由,但是有没有办法更改默认行为?     

解决方法

您可以,您需要提供实现route0ѭ的自己的路由处理程序,这里有一个很好的例子。     ,您可以为操作方法专门使用ActionName属性。 [ActionName(\“具有长名称的动作\”)] public ActionResult AnActionWithLongName(){   // ... } 另外-我更喜欢为每个控制器/操作方法添加一条路由,这样我就不会创建任何意外的映射(我也对它们进行了单元测试)-所以这是要考虑的一件事。     ,我对此进行了更多研究,并通过制作自己的IHttpHandler和IRouteHandler使其正常工作,查看System.Web.Mvc.MvcHandler和System.Web.Mvc.MvcRouteHandler的源代码,并基本上复制并粘贴以及替换了它解析控制器名称。但是我根本不喜欢这种方法,因为它太重了,无法重做整个请求处理管道以完成简单的装饰任务。因此,我将为每个具有两个名称(没有那么多名称)的控制器添加手动路由。 更新:我提供了一个更简单的解决方案,这是通过重写ControllerFactory来完成的。
public class ControllerFactory : DefaultControllerFactory
{
    public override IController CreateController(RequestContext requestContext,string controllerName)
    {
        requestContext.RouteData.Values[\"action\"] =
            requestContext.RouteData.Values[\"action\"].ToString().Replace(\"-\",\"\");
        return base.CreateController(requestContext,controllerName.Replace(\"-\",\"\"));
    }
}
我对此的博客文章:http://cangencer.wordpress.com/2011/05/27/better-looking-urls-in-asp-net-mvc-3/     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...