asp.net core 系列 14 错误处理

一.概述

  本文介绍处理 ASP.NET Core 应用中常见错误的一些方法。主要是关于:开发环境异常页;非开发环境配置自定义异常处理页;配置状态代码页(没有正文响应,http状态400~599的)。

  

  1.1 开发环境异常页

    要将应用配置为显示有关异常的详细信息的页面,请使用开发环境异常页。要环境设置为 Development,具体查看:asp.net core系列9环境。下面向 Startup.Configure 方法添加代码行:

      if (env.IsDevelopment())
      {
           //注意: 调用该方法,要放在对其捕获异常的任何中间件前面,中间件格式Use{ xxx }(),如UseMvc();
          app.UseDeveloperExceptionPage();
      }

  

  1.2 配置自定义异常处理页

    配置自定义异常处理页,用于非 Development 环境下,下面是razor项目中的异常处理页代码(Pages下Error.cshtml页面)。

      if (env.IsDevelopment())
      {
          app.UseDeveloperExceptionPage();
      }
      else
      {
          app.UseExceptionHandler("/error");
      }

   在 MVC 应用中,不要使用 HTTP 方法特性(如 HttpGet)修饰错误处理程序操作方法。 显式谓词可阻止某些请求访问方法。 允许匿名访问方法,以便未经身份验证的用户能够接收错误视图。

      //mvc中,HomeController中的Error, 添加[AllowAnonymous]
        [AllowAnonymous]
        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }

  1.3配置状态代码页

    默认情况下,应用不会为 HTTP 状态代码提供丰富状态代码页,例如 404 未找到。下面我们访问一个不存在的页面,默认页面显示如下:

    下面提供状态代码页,使用状态代码页中间件,向 Startup.Configure 方法中添加。注意: 管道中请求处理中间件之前调用 UseStatusCodePages。

           //请求处理中间件之前调用
            app.UseStatusCodePages();

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseCookiePolicy();
            app.UseMvc();

    默认情况下,状态代码页中间件为常见状态代码(如 404)添加纯文本处理程序, 如下所示:

    该中间件支持多种扩展方法。 一种方法采用 Lambda 表达式:

    //自定义页面的输出类型和文字信息及状态码,用于处理程序,检查状态代码在400~599之间且没有正文的响应
    app.UseStatusCodePages(async context =>
    {
        context.HttpContext.Response.ContentType = "text/plain";

        await context.HttpContext.Response.WriteAsync(
            "Status code page, status code: " +
            context.HttpContext.Response.StatusCode);
    });

    UseStatusCodePages 重载需要使用内容类型和格式字符串:

    app.UseStatusCodePages("text/plain", "Status code page, status code: {0}");

  1.4 UseStatusCodePagesWithRedirects重定向

    该中间件作用是: (1) 向客户端发送“302 和状态码。(2)将客户端重定向到 URL 模板中的位置。  

         //当没有正文的响应时,重定向到指定页面,{0}点位符表示请求出错的http的状态码
          app.UseStatusCodePagesWithRedirects("/error/{0}");

          //请求处理中间件之前调用
          // app.UseStatusCodePages();

    下面是在razor项目中,当访问一个不存在的页面时http://localhost:60397/page/missingpage,地址重定向到error页并显示出错的状态码,必要时还可以在error页的OnGet()方法中进行业务处理。

  参考文献

  官方资料:asp.net core 错误处理

原文地址:https://www.cnblogs.com/MrHSR/p/10302558.html

时间: 2024-08-28 01:51:46

asp.net core 系列 14 错误处理的相关文章

ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件

在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将对这三个中间件进行详细介绍.在开发环境呈现的异常页面是通过一个类型为DeveloperExceptionPageMiddleware中间件实现的.[本文已经同步到<ASP.NET Core框架揭秘>之中] 1: public class DeveloperExceptionPageMiddlewa

ASP.NET Core应用的错误处理[3]:ExceptionHandlerMiddleware中间件如何呈现&ldquo;定制化错误页面&rdquo;

DeveloperExceptionPageMiddleware中间件利用呈现出来的错误页面实现抛出异常和当前请求的详细信息以辅助开发人员更好地进行纠错诊断工作,而ExceptionHandlerMiddleware中间件则是面向最终用户的,我们可以利用它来显示一个友好的定制化的错误页面.按照惯例,我们还是先来看看ExceptionHandlerMiddleware的类型定义. [本文已经同步到<ASP.NET Core框架揭秘>之中] 1: public class ExceptionHan

ASP.NET CORE系列【五】webapi整理以及RESTful风格化

原文:ASP.NET CORE系列[五]webapi整理以及RESTful风格化 介绍 什么是RESTful?  这里不多做赘述,详情请百度! 哈哈,本来还想巴拉巴拉介绍一些webapi, RESTful的, 还是算了,咱们直接上干货!(原因是懒!哈哈) 使用 以前使用过mvc的人对webapi 应该都很熟悉,先看一段熟悉的代码 大伙发现了什么没?跟以往mvc大多数相同,但有些地方不同 ,我们来一起看看有何区别 1.首先SysUsersController上面有一段代码 [Produces("a

asp.net core 系列 15 中间件

原文:asp.net core 系列 15 中间件 一.概述 中间件(也叫中间件组件)是一种装配到应用管道以处理请求和响应的软件. 每个组件:(1)选择是否将请求传递到管道中的下一个组件;(2)可以在管道中的下一个组件之前和之后执行工作. 请求委托用于生成请求管道. 请求委托会处理每个 HTTP 请求.使用以下方法配置请求委托:Run,  Map, Use扩展方法.可以将单个请求委托作为匿名方法(称为内联中间件in-line middleware) 或者可以在可重用类中定义.这些可重用的类和内联

asp.net core 系列 16 Web主机 IWebHostBuilder

原文:asp.net core 系列 16 Web主机 IWebHostBuilder 一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适用于托管 Web 应用:通用主机(ASP.NET Core 2.1 或更高版本)是适用于托管非 Web 应用:在未来的版本中,通用主机将适用于托管任何类型的应用,包括 Web 应用. 通用主机最终将取代 Web

asp.net core 系列 8 Razor框架路由(下)

三.页面路由操作约定 接着上篇讲asp.net core 系列 7 Razor框架路由.在上篇继续第三节 "页面路由操作约定" 的最后一小节 AddPageRoute . 3.3. 配置页面路由AddPageRoute 使用 AddPageRoute 配置路由,该路由与指定页面关联, 使用指定的路由生成页面链接. AddPageRoute 使用 AddPageRouteModelConvention 建立路由. 示例应用为 Privacy.cshtml 创建指向 /ThePrivacy

asp.net core系列 36 WebAPI 搭建详细示例

原文:asp.net core系列 36 WebAPI 搭建详细示例 一.概述 HTTP不仅仅用于提供网页.HTTP也是构建公开服务和数据的API强大平台.HTTP简单灵活且无处不在.几乎任何你能想到的平台都有一个HTTP库,因此HTTP服务可以覆盖广泛的客户端,包括浏览器,移动设备和传统的桌面应用程序. ASP.NET Web API 是一个框架,基于.NET Framework 或.NET Core 之上构建 Web API. 从本章开始学习Web API系列时,先从一个示例开始,下面使用A

asp.net core系列 65 正反案例介绍SOLID原则

原文:asp.net core系列 65 正反案例介绍SOLID原则 一.概述 SOLID五大原则使我们能够管理解决大多数软件设计问题.由Robert C. Martin在20世纪90年代编写了这些原则.这些原则为我们提供了从紧耦合的代码和少量封装转变为适当松耦合和封装业务实际需求的结果方法.使用这些原则,我们可以构建一个具有整洁,可读且易于维护的代码应用程序. SOLID缩写如下: SRP  单一责任原则 OCP 开放/封闭原则 LSP  里氏替换原则 ISP   接口分离原则 DIP   依

ASP.NET CORE系列【一】搭建ASP.NET CORE项目

原文:ASP.NET CORE系列[一]搭建ASP.NET CORE项目 为什么要使用 ASP.NET Core? NET Core 刚发布的时候根据介绍就有点心里痒痒,微软的尿性都懂的,新东西bug太多,现在2.0也发布很久了,决定研究一下. ASP.NET Core官方文档https://docs.microsoft.com/en-us/aspnet/core/getting-started ASP.NET Core 具有如下优点: 生成 Web UI 和 Web API 的统一场景. 集成