asp.net-mvc – ASP.NET MVC4 CustomErrors DefaultRedirect被忽略

我有一个MVC 4应用程序,使用自定义HandleErrorAttribute来处理只有自定义的异常.我想拦截认的404和其他非500错误页面,并用更有吸引力的东西替换它们.为此,我将以下内容添加到我的Web.config中:
<system.web>
    <customErrors mode="On" defaultRedirect="~/Error/Index" />
...
</ system.web>

我有一个带有Index方法和对应视图的错误控制器,但是我仍然获得认的404错误页面.我也尝试将defaultRedirect设置为静态HTML文件无效.我已经尝试添加特定于404< customErrors>之内的404错误处理,我甚至尝试以编程方式修改路由,没有任何结果.我失踪了什么为什么ASP忽略我的错误处理?

注意:我以前注意到,我无法在本地测试我的CustomHandleErrorAttribute,即使使用< customErrors mode =“On”.当我从我的设备盒中点击我的服务器时,它的工作正常,但不知道是否相关. This guy也有同样的问题.

解决方法

这应该工作:

Web.Config

<customErrors mode="On"
   defaultRedirect="~/Views/Shared/Error.cshtml">

  <error statusCode="403"
    redirect="~/Views/Shared/UnauthorizedAccess.cshtml" />

  <error statusCode="404"
    redirect="~/Views/Shared/FileNotFound.cshtml" />

</customErrors>

2.在FilterConfig类中注册HandleErrorAttribute作为全局动作过滤器,如下所示

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new CustomHandleErrorAttribute());
        filters.Add(new AuthorizeAttribute());
    }

如果这不工作,那么尝试通过检查Global.asax中的以下内容的状态代码来转移响应:至少它必须工作.

void Application_EndRequest(object sender,EventArgs e)
{
    if (Response.StatusCode == 401)
    {
        Response.ClearContent();
        Server.Transfer("~/Views/Shared/UnauthorizedAccess.cshtml");
    }
}

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....