UseDeveloperExceptionPage
开发者异常页面组件:
-
一般用于开发阶段,快速的排错。
-
返回一个状态码 500 的错误响应
- 会在页面显示很详细的敏感信息
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
//开发环境执行
DeveloperExceptionPageOptions developerExceptionPageOptions = new DeveloperExceptionPageOptions
{
SourceCodeLineCount = 15//默认6,显示异常源码的前后N行代码
};
app.UseDeveloperExceptionPage(developerExceptionPageOptions);
}
else
{
app.UseExceptionHandler("/Home/Error");
}
}
这种虽然能在页面显示出具体的错误信息,但是这并不适合生产环境。在生产环境下我们更希望为用户呈现一个定制的错误页面。
ExceptionHandler
异常处理组件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// 方式一
var options = new ExceptionHandlerOptions
{
ExceptionHandler = async context =>
{
var exceptionHandlerPathFeature = context.Features.Get<IExceptionHandlerPathFeature>();
var ex = exceptionHandlerPathFeature?.Error;
if (ex != null)
{
context.Response.ContentType = "text/plain;charset=utf-8";
await context.Response.WriteAsync("程序出错了:" + ex.ToString());
// await context.Response.WriteAsync("程序出错了");
}
}
};
app.UseExceptionHandler(options);
//方式二, 和方式一效果一样
//app.UseExceptionHandler(applicationBuilder => applicationBuilder.Run(async context => { context.Response.ContentType = "text/plain;charset=utf-8"; await context.Response.WriteAsync("程序出错了"); }));
//方式三, 跳转到错误页面
//app.UseExceptionHandler("/Home/Error");
}
UseStatusCodePages
通过Http状态码去判断是否为成功的返回并进行处理
- 判断是否是400-600,也就是4xx 5xx相关的状态码
- 不包含处理异常相关的逻辑
- 可以用来处理 后缀页面不存在404的情况
//使用方式
//app.UseStatusCodePages();//Status Code: 404; Not Found
//或
//app.UseStatusCodePages("text/plain;charset=utf-8", "状态码:{0}");
//或
app.UseStatusCodePages(async context =>
{
context.HttpContext.Response.ContentType = "text/plain;charset=utf-8";
await context.HttpContext.Response.WriteAsync($"状态码:{context.HttpContext.Response.StatusCode}");
});
//或
//app.UseStatusCodePages(new StatusCodePagesOptions
//{
// HandleAsync = async context => {
// context.HttpContext.Response.ContentType = "text/plain;charset=utf-8";
// await context.HttpContext.Response.WriteAsync($"状态码:{context.HttpContext.Response.StatusCode}");
// }
//});
//或
//app.UseStatusCodePages(configure =>
//{
// configure.Run(async context =>
// {
// await context.Response.WriteAsync($"状态码:{context.Response.StatusCode}");
// });
//});