Tutorialsteacher

关注我们

文章
  • C#
  • C# 面向对象编程
  • ASP.NET Core
  • ASP.NET MVC
  • LINQ
  • 控制反转 (IoC)
  • Web API
  • JavaScript
  • TypeScript
  • jQuery
  • Angular 11
  • Node.js
  • D3.js
  • Sass
  • Python
  • Go lang
  • HTTPS (SSL)
  • 正则表达式
  • SQL
  • SQL Server
  • PostgreSQL
  • MongoDB
Entity Framework Extensions - 提升 EF Core 9
  批量插入
  批量删除
  批量更新
  批量合并
  • 全部
  • C#
  • MVC
  • Web API
  • Azure
  • IIS
  • JavaScript
  • Angular
  • Node.js
  • Java
  • Python
  • SQL Server
  • SEO
  • 创业
  • 效率

如何在 ASP.NET MVC 中使用 web.config customErrors

web.config 中 system.web 下的 <customErrors> 元素用于将错误代码配置到自定义页面。它可以用于为任何 4xx 或 5xx 错误代码配置自定义页面。但是,它不能用于记录异常或对异常执行任何其他操作。

当 ASP.NET MVC 应用程序发生异常时,如果从本地主机运行,它默认会显示以下屏幕(黄色死亡屏幕),其中显示错误信息。

当您在 Visual Studio 中创建 MVC 应用程序时,它不会开箱即用地实现任何异常处理技术。当发生异常时,它将显示一个错误页面。

例如,考虑以下抛出异常的动作方法。

示例:动作方法
namespace ExceptionHandlingDemo.Controllers
{
        public class HomeController : Controller
    {
        public ActionResult Contact()
        {
        string msg = null;
            ViewBag.Message = msg.Length; // this will throw an exception

        return View();
        }
}

现在,在浏览器中导航到 /home/contact,您将看到以下黄色页面(也称为黄色死亡屏幕),其中显示了异常详细信息,例如异常类型、发生异常的行号和文件名以及堆栈跟踪。

Default Error Page in MVC

所有未处理的异常都应该被处理,并向用户显示有意义的消息,而不是错误信息。我们可以使用 web.config 文件的 <customErrors> 部分来渲染或重定向到自定义页面。

第一步是使用其模式属性启用 customErrors,该属性可以具有以下三个值之一

On:指定启用自定义错误。如果未指定 defaultRedirect,用户会看到一个通用错误页面,例如 ASP.NET MVC 应用程序中的 Error.cshtml。

Off:指定禁用自定义错误。这将显示详细错误。

RemoteOnly:指定仅向远程客户端显示自定义错误,并向本地主机显示 ASP.NET 错误。这是默认值。

我们将使用 Mode=On 在本地主机上进行测试。理想情况下,我们应该使用 RemoteOnly。

示例:启用 customErrors
<system.web> 
    <customErrors mode="On"></customErrors>
</system.web>

您还需要在 FilterConfig.cs 文件中添加 HandleErrorAttribute 过滤器。

示例:添加 HandleErrorAttribute 过滤器
public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }
}

启用 customErrors 模式为 On 后,ASP.NET MVC 应用程序将显示默认的自定义错误页面,如下所示。

Custom Error Page

惊讶!它是如何显示上述页面的,从哪里来的?

好吧!它已经从 Shared 文件夹渲染了 Error.cshtml 视图。HandleErrorAttribute 过滤器在 ASP.NET MVC 中设置了这个默认错误视图。

通过按 F12(在 Chrome 中)并在开发人员控制台中刷新页面,检查响应的状态码。您将看到它已响应状态码 500。

Redirect to error

此设置将仅显示 500 级错误的自定义页面,而不显示其他错误代码的自定义页面。

使用 defaultRedirect 指定当发生错误时,HTTP 请求应默认重定向到哪里。您可以指定 webform、HTML 或动作方法的名称。这将在任何错误代码(不仅仅是 500)下重定向到此页面。

如果您使用 defaultRedirect 属性,则必须删除 HttpErrorHandler 过滤器。否则,它将重定向到默认的 Error.cshtml 页面,而不是配置的页面。

例如,以下配置将在任何 5xx 或 4xx 异常时显示自定义 webform Error.aspx 页面。

示例:customErrors
<system.web> 
    <customErrors mode="On" defaultRedirect="Error.aspx" >
    </customErrors>
</system.web>

以下配置将在任何 5xx 或 4xx 异常时显示自定义 HTML 页面 Error.html。

示例:customErrors
<system.web> 
    <customErrors mode="On" defaultRedirect="Error.html" >
    </customErrors>
</system.web>

当发生异常时,您还可以重定向到控制器的动作方法。以下设置将重定向到 MVC 应用程序中 ErrorController 的 Index 动作方法。

示例:customErrors
<system.web> 
    <customErrors mode="On" defaultRedirect="/error" >
    </customErrors>
</system.web>

上述设置将在浏览器中显示以下结果。

Redirect to error

请注意,所有自定义错误页面都返回状态码 200,并且 URL 包含 ?aspxerrorpath= 查询字符串,该查询字符串指向原始请求的页面或动作方法。

您还可以使用子 <error> 元素为不同的错误代码设置不同的动作方法或页面。以下为不同的错误代码设置不同的动作方法。

示例:配置错误代码
<customErrors mode="On" defaultRedirect="/error" >
    <error statusCode="400" redirect="/error/badrequest"  />
    <error statusCode="404" redirect="/error/notfound"  />
    <error statusCode="500" redirect="/error/internalerror"  />
</customErrors>

当然,您必须创建所有上述动作方法及其视图。当导航到不存在的页面 /home/test 时,上述设置将显示以下结果。

如您所见,当显示自定义错误页面时,URL 包含查询字符串 ?aspxerrorpath。您可以使用 redirectMode 属性保留原始 URL。

redirectMode

如果您希望保留原始 URL 而不带 ?aspxerrorpath 查询字符串,请使用 redirectMode 属性。默认情况下,它将 redirectMode 设置为 ResponseRedirect,这就是当发生异常时 URL 会更改的原因。

将 redirectMode 属性设置为 ResponseRewrite。这将保留原始 URL,但仍显示自定义页面。请注意,ResponseRewrite 仅适用于 .aspx 或 .html 文件,而不适用于动作方法。如果要为不同的状态码设置动作方法,请保留 ResponseRedirect 值。

以下为不同的状态码设置不同的 HTML 文件,并将 redirectMode 设置为 ResponseRewrite。

示例:ResponseRewrite
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/500.html"   >
    <error statusCode="500" redirect="~/500.html" />
    <error statusCode="404" redirect="~/404.html" />
    <error statusCode="400" redirect="~/400.html" />
</customErrors>

在应用程序的根目录中创建 500.html、404.html 和 400.html 文件。上述设置将保留原始 URL,不带查询字符串,同时显示 HTML 页面的内部内容,响应状态码为 200 OK。

因此,您可以使用 web.config 中的 <customErrors> 部分在 ASP.NET webform 或 MVC 应用程序中发生异常时显示自定义页面。

<customErrors> 配置将始终返回状态码为 200 的响应。这对于网站来说不是一个好的 SEO 实践。了解如何在 ASP.NET MVC 中使用 httpErrors 显示自定义错误页面并返回错误代码。

TUTORIALSTEACHER.COM

TutorialsTeacher.com 是您权威的技术教程来源,旨在通过循序渐进的方法,指导您掌握各种网络和其他技术。

我们的内容旨在帮助所有级别的学习者轻松快速地学习技术。通过访问此平台,您确认已阅读并同意遵守我们的使用条款和隐私政策,这些条款和政策旨在保护您的体验和隐私权。

[email protected]

关于我们使用条款隐私政策
copywrite-symbol

2024 TutorialsTeacher.com. (v 1.2) 版权所有。