扩展ASP.NET MVC 4 MvcHandler

时间:2013-02-25 14:05:18

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

我正在尝试向默认的MvcHandler添加一些功能。发生的事情是:我想要破解url而不是Pascal Case url。换句话说,如果我的控制器是SomeController,我希望URL是/ some-controller而不是/ SomeController。

我最好的解决方法是:我创建了一个映射文件URLMappings.xml,它将每个控制器映射到每个所需的URL。然后我扩展了默认的Route类来生成基于此的传出URL和默认的RouteHandler来理解基于此的url。嗯,这很好用,因为即使没有创建一些映射,框架也会使用默认行为。

我的观点是:有了这个,路由系统理解了两种Url,这导致了重复的内容SEO问题。我想要实现以下内容:

  1. 获取控制器值
  2. 查看某些映射上的控制器名称是否与值
  3. 匹配
  4. 如果匹配,那么有一个比输入的URL更优的URL,应该返回404.
  5. 我在网上搜索过,我发现这样做的唯一方法是创建一个新的IHttpHandler。但是我不想从头开始,因为我需要所有的MVC功能。我只是想把这个逻辑放在ProcessRequest上,但是我的方法的过度版本没有被执行。

    有人可以告诉我如何处理这件事吗?对不起,如果问题很愚蠢或者问题不详细。如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

您不需要自定义MvcHandler,而是自定义Route。这个功能已经有一个名为LowercaseRoutesMVC的NuGet包。随意下载,探索source code并在必要时进行调整(将短划线放在任何你想放的地方)。