【问题标题】:Extending ASP.NET MVC 4 MvcHandler扩展 ASP.NET MVC 4 MvcHandler
【发布时间】:2013-02-25 22:09:19
【问题描述】:

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

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

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

  1. 获取控制器值
  2. 查看某些映射上的控制器名称是否与值匹配
  3. 如果匹配,则有一些比输入的 URL 更可取的 URL,应该返回 404。

我在网上搜索过,我发现这样做的唯一方法是创建一个新的 IHttpHandler。但是我不想从头开始,因为我需要所有 MVC 功能。我只是想把这个逻辑放在 ProcessRequest 上,但是我的覆盖版本的方法没有被执行。

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

【问题讨论】:

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


    【解决方案1】:

    您不需要自定义MvcHandler,而是需要自定义Route。已经有一个用于此功能的 NuGet 包,名为 LowercaseRoutesMVC。随意下载它,探索source code 并在必要时进行调整(将破折号放在您想要放置的任何位置)。

    【讨论】:

    • 谢谢@Darin,我去看看。我认为这解决了我的问题。
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    相关资源
    最近更新 更多