如何解决更改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/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。