我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ASP.NETCore处理错误环境

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ASP.NETCore处理错误环境

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("<html lang=\"en\"><body>\r\n");
            await context.Response.WriteAsync("ERROR!<br><br>\r\n");
            var exceptionHandlerPathFeature = 
                context.Features.Get<IExceptionHandlerPathFeature>();
            // 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!<br><br>\r\n");
            }
            await context.Response.WriteAsync("<a href=\"/\">Home</a><br>\r\n");
            await context.Response.WriteAsync("</body></html>\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处理错误环境的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ASP.NETCore处理错误环境

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

如何在 Golang 并发环境中处理错误?

在 go 并发环境中处理错误的有效方法包括:异常处理(panic/recover): 适用于处理意外错误,通过 panic 引发异常,再用 recover 捕获。错误通道: 用来将并发 goroutine 中的错误传给主 goroutine
如何在 Golang 并发环境中处理错误?
2024-05-14

Go多协程并发环境下的错误处理

在Go语言中,我们通常会用到panic和recover来抛出错误和捕获错误,这一对操作在单协程环境下我们正常用就好了,并不会踩到什么坑。但是在多协程并发环境下,我们常常会碰到以下两个问题。

docker环境错误如何检测

在Docker环境中,有几种常见的错误可以被检测到:1. 容器无法启动:当容器的启动命令执行失败时,可以通过查看容器的日志来检测到该错误。可以使用`docker logs`命令来查看容器的日志输出。2. 容器崩溃:当容器运行过程中发生崩溃时
2023-09-23

C++ 函数异常与多线程:并发环境下的错误处理

c++++ 中函数异常处理对于多线程环境尤为重要,以确保线程安全和数据完整性。通过 try-catch 语句,可以在出现异常时捕获和处理特定类型的异常,以防止程序崩溃或数据损坏。C++ 函数异常与多线程:并发环境下的错误处理在多线程环境中
C++ 函数异常与多线程:并发环境下的错误处理
2024-05-04

Linux环境变量配置错误诊断

在Linux环境中,配置错误可能出现在多个地方,例如.bashrc、.bash_profile、.profile等查看当前环境变量:在终端中输入以下命令,查看当前shell的环境变量:echo $PATH如果发现缺失或不正确的路径,请检
Linux环境变量配置错误诊断
2024-09-24

pycharm环境配置错误怎么改正

解决pycharm环境配置错误的步骤:检查python解释器路径是否正确配置。安装必要的python库。检查环境变量中是否包含python解释器和库路径。重新加载项目以应用更改。更新pycharm至最新版本。如果以上方法无效,重置pycha
pycharm环境配置错误怎么改正
2024-04-24

Python 错误处理

1.1   错误处理1.1.1   try>>> try:...    print('try...')...    r = 10 / 0...    print('result:', r)... except ZeroDivisionErr
2023-01-31

阿里云服务器环境配置错误

如果您的阿里云服务器环境配置错误,可能是由于以下原因之一:配置错误:当您的配置不正确时,服务器可能无法正常启动。例如,可能存在一些配置错误导致无法加载配置文件或无法安装所需的软件或服务。数据损坏:当您在阿里云服务器上使用数据时,例如,您可能使用了不正确或错误的数据结构或算法。当您尝试在不正确的情况下访问数据时,可能会导致服务器宕机。网络连接问题:阿里云服务器需要可靠的网络连接才能提供高可用性和高性能。当您的...
2023-10-27

Python 6.1 错误处理

错误处理在程序运行过程中,如 果发生了错误,可以事先约定返回一个错误代码,这样,就知道是否有错以及出错原因。在操作系统提供的调用中,返回错误代码非常常见。比如打开文件的open()函数,成功时返回文件描述符(就是一个整数),出错时返回-1.
2023-01-31

FastAPI--错误处理(5)

HTTPException异常抛出再之前Bottle 中其实有一个就是HttpError异常类,在FastAPI也存在这么一个HTTPException。比如:importuvicornfromfastapiimportFastAPI,HT
2023-01-31

错误处理的王者:ASP 错误处理的终极指南

ASP 错误处理是 ASP.NET 的一项核心功能,它可以帮助您在代码中捕获和处理错误,从而使您的应用程序更加健壮和可靠。
错误处理的王者:ASP 错误处理的终极指南
2024-02-10

云服务器安装java环境变量错误

首先,环境变量是云服务器的重要组成部分,它们的配置决定了服务器能否正常运行。如果环境变量配置错误,可能会导致Java环境变量无法正确读取或写入,从而影响服务器的正常运行。在云服务器安装过程中,环境变量的错误可能导致无法正常安装Java环境变量,这可能会导致以下问题:数据无法写入到服务器:如果环境变量配置不正确,Java
云服务器安装java环境变量错误
2023-10-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录