MVC Razor 中的 404 实现

404 implementation in MVC Razor

我正在使用 ASP.NET MVC 4.5.1 razor C#

我的 Web.config 配置了以下标签之一。

<customErrors mode="On" defaultRedirect="Error">
  <error statusCode="404" redirect="/Error.htm"/>
</customErrors>

我有一个 class 来捕获如下所示的所有异常。

public class Error : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        base.OnException(filterContext);
    }
}

我的 Base Controller 如下所示。

[Error]
public class BaseController : AsyncController
{

}

我的控制器动作方法如下

[HttpGet, Route("All-User"), LoginAuthentication, AdminAuthorization]
public async Task<ActionResult> AllUsers()
{
    var list = await _user.List();
    return View(list);
}

我的 Url 如下所示,完美运行

localhost/All-User

当我在 url 下面执行时,我得到 404,但是没有执行错误 class 的 catch 块。

localhost/All-Userabc

我是不是漏掉了什么?

我也试过 Install-Package NotFoundMvc 但这不起作用并且出现异常 "Invalid Operation Exception"

您的 Error class 不会为此 url 调用,因为它继承了 HandleErrorAttribute,只有当操作方法抛出异常时才会调用。在您的情况下,没有执行任何操作方法,因为您的 URL 不匹配任何路线。

如果您希望针对 404 错误执行代码,请尝试使用此问题中的默认路由示例 - ASP.NET MVC - Catch All Route And Default Route