千家信息网

ASP.NET Core怎么处理错误环境

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"ASP.NET Core怎么处理错误环境"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"ASP.NET Core怎么处理错误环境"文章能帮助大
千家信息网最后更新 2025年01月19日ASP.NET Core怎么处理错误环境

这篇文章主要介绍"ASP.NET Core怎么处理错误环境"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"ASP.NET Core怎么处理错误环境"文章能帮助大家解决问题。

1.前言

ASP.NET Core处理错误环境区分为两种:开发环境和非开发环境。

  • 开发环境:开发人员异常页。

  • 非开发环境:异常处理程序页、状态代码页。

在Startup.Configure方法里面我们会看到如下代码:

public void Configure(IApplicationBuilder app, IHostingEnvironment env){    if (env.IsDevelopment())    {       //开发环境    }     else    {       //非开发环境    }}

env.IsDevelopment()是判断应用程序运行是在开发环境还是非开发环境,具体配置在Properties/launchSettings.json,找到ASPNETCORE_ENVIRONMENT属性,默认值是开发环境(Development),具体环境配置知识点后面我们再来学习下。

2.开发人员异常页

向Startup.Configure方法添加代码,以当应用在开发环境中运行时启用此页:

if (env.IsDevelopment()){    app.UseDeveloperExceptionPage();}

开发人员异常页仅当应用程序在开发环境中运行时才会启用,而且调用UseDeveloperExceptionPage要配置于任何要捕获其异常的中间件前面。
该页包括关于异常和请求的以下信息:

  • 堆栈跟踪

  • 查询字符串参数(如果有)

  • Cookie(如果有)

  • request header

3.异常处理程序页

在下面的示例中,UseExceptionHandler 在非开发环境中添加异常处理中间件:

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

Razor Pages应用模板提供"页面"文件夹中的Error页(.cshtml)和PageModel类(ErrorModel)。 对于MVC应用,项目模板包括Error操作方法和Error视图。操作方法如下:

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

不要使用HTTP方法属性(如HttpGet)修饰错误处理程序操作方法,因为会阻止某些请求访问的方法。同时最好允许匿名访问方法,以便未经身份验证的用户能够接收错误视图。
UseExceptionHandler中间还可以使用lambda进行异常处理:

if (env.IsDevelopment()){    app.UseDeveloperExceptionPage();}else{   app.UseExceptionHandler(errorApp =>   {        errorApp.Run(async context =>        {            context.Response.StatusCode = 500;            context.Response.ContentType = "text/html";            await context.Response.WriteAsync("\r\n");            await context.Response.WriteAsync("ERROR!

\r\n"); var exceptionHandlerPathFeature = context.Features.Get(); // Use exceptionHandlerPathFeature to process the exception (for example, // logging), but do NOT expose sensitive error information directly to // the client. if (exceptionHandlerPathFeature?.Error is FileNotFoundException) { await context.Response.WriteAsync("File error thrown!

\r\n"); } await context.Response.WriteAsync("Home
\r\n"); await context.Response.WriteAsync("\r\n"); await context.Response.WriteAsync(new string(' ', 512)); // IE padding }); });app.UseHsts();}

4.状态代码页

一般情况下,ASP.NET Core应用程序不会为HTTP状态代码(如"404-未找到")提供状态代码页的。但若要提供状态代码页,可以使用状态代码页中间件。

4.1 UseStatusCodePages中间件

若要启用常见错误状态代码的默认纯文本处理程序,请在Startup.Configure方法中调用 UseStatusCodePages:

app.UseStatusCodePages();

而这里有一点要注意的是,调用UseStatusCodePages中间件要在例如静态文件中间件和 MVC中间件等中间件前面调用:

app.UseStatusCodePages();app.UseStaticFiles();app.UseMvc(routes =>{    routes.MapRoute(        name: "default",        template: "{controller=Home}/{action=Index}/{id?}");});

下面通过运行应用程序在浏览器地址栏上输入一个不存在地址看看配置该中间件后的效果:

很显然当我们输入一个不存在地址之后就会打开一个处理错误的状态代码页。
UseStatusCodePages中间件还有两种重载使用方法,具体运行效果就不一一截图了,大家自行测试。

  • 包含格式字符串的 UseStatusCodePages:

app.UseStatusCodePages("text/plain", "Status code page, status code: {0}");
  • 包含lambda的UseStatusCodePages:

app.UseStatusCodePages(async context =>{    context.HttpContext.Response.ContentType = "text/plain";    await context.HttpContext.Response.WriteAsync(        "Status code page, status code: " +        context.HttpContext.Response.StatusCode);});

4.2 UseStatusCodePagesWithRedirect中间件

  • 向客户端发送"302 - 已找到"状态代码。

  • 将客户端重定向到URL模板中的位置。

下面我们在Startup.Configure方法中调用UseStatusCodePagesWithRedirect:

app.UseStatusCodePagesWithRedirects("/Error/{0}");

运行应用程序在浏览器上输入不存在地址https://localhost:44353/1看看配置该中间件后的效果,你会发觉当我们输入上述地址后会跳转到https://localhost:44353/Error/404链接去了,并显示:

这就说明白当我们输入一个不存在地址之后会重定向中间件设置的地址页面去了。

关于"ASP.NET Core怎么处理错误环境"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

环境 开发 中间件 方法 处理 代码 状态 程序 错误 应用 地址 应用程序 输入 配置 知识 运行 人员 效果 模板 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 轻量化服务器管理器怎么设置 戴尔t320服务器做云存储 手机软件开发 应用方向 域控服务器时间同步 嵩明智能化软件开发市场报价 网络安全技术考试题 上海服务器回收哪家便宜 河南创新网络技术服务代理品牌 陕西奇亚吉冠网络技术有限公司 龙华正规的网络安全运维 工商银行软件开发中心 冯岚 网络安全与信息化考研方向 qq飞车手游如何找回以前服务器 软件开发周期和模型 网络安全教育视频脚本 app服务器方案 网络安全等保目录 憨憨的服务器管理号 广州工商银行的软件开发中心在哪 枣庄智慧养老软件开发专业制作 网络安全零信任技术发展报告 台服服务器人数 教师网络安全宣传心得 网络安全检测设置 上海滕王网络技术有限公司 汉王考勤用的什么数据库 关于网络安全的相声词 万达网科 大数据库 湛江服务软件开发收费 电动助力转向系统软件开发
0