一.局部异常处理(Action)
[HttpGet]
public async Task<IActionResult> Get()
{
try
{
//do something
}
catch(Exception e)
{
return StatusCode(500,"An Error Occurred");
}
}
二、全局异常处理
1.默认的异常处理配置
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
}
2.使用UseExceptionHandler处理(自定义中间件)
封装为扩展方法,用app调用
public static class ExceptionHandlingExtensions
{
public static void UseMyExceptionHandler(this IApplicationBuilder app,ILoggerFactory loggerFactory)
{
app.UseExceptionHandler(builder => {
builder.Run(async context =>
{
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
context.Response.ContentType = "application/json";
var ex = context.Features.Get<IExceptionHandlerFeature>();
if (ex != null)
{
//记录日志
var logger = loggerFactory.CreateLogger("BlogDemo.Api.Extensions.ExceptionHandlingExtensions");
logger.LogDebug(500, ex.Error, ex.Error.Message);
}
await context.Response.WriteAsync(ex?.Error?.Message ?? "an error occure");
});
});
}
}
在Configure()调用
public void Configure(IApplicationBuilder app, IHostingEnvironment env,ILoggerFactory loggerFactory)
{
//app.UseDeveloperExceptionPage();//返回错误页面,如果做api不适合
app.UseMyExceptionHandler(loggerFactory);
app.UseHttpsRedirection();
app.UseMvc();
}