代码之家  ›  专栏  ›  技术社区  ›  BuddyJoe

ASP.NET MVC控制器和扩展框架

  •  1
  • BuddyJoe  · 技术社区  · 16 年前

    是否有任何方法可以从框架捕获“未找到控制器”事件? 也许这个事件不存在。但如果我只是选择一个URL来抛出框架的路由系统,比如:

    http://localhost:54321/foobar

    未经修改的最终结果是404错误。

    最简单的方法是通过一个定制的控制器工厂来实现这一点吗?然后从那里处理。

    更新: 我正在寻找一种方法来捕获和处理请求流中较早的部分。不在控制器级别。见乔恩·加洛韦回答的评论。

    2 回复  |  直到 16 年前
        1
  •  1
  •   Jon Galloway    16 年前

    我会在您的路由声明末尾添加一个catchall路由,并在那里处理它。

    /* all your other routes here */
    routes.MapRoute("NotHandled", 
      "{*url}",
      new { controller = "NotFound", action = "Index" });
    
        2
  •  1
  •   Robert Harvey    16 年前

    我认为这里的问题比我们所看到的要多。

    特别是,当用户在一个有效的控制器上调用一个有效的操作,并且请求的资源“产品、物品、子类别等”不存在时会发生什么?

    此外,为了搜索引擎的目的,无效的URL需要返回一个真正的404错误。

    有关这些问题的详细检查,请参阅以下文章:

    ASP.NET MVC中基于资源的404错误策略
    http://richarddingwall.name/2008/08/17/strategies-for-resource-based-404-errors-in-aspnet-mvc/