我在一个简单的中间件中遇到了问题。响应的状态代码是200,即使我在控制器操作中抛出异常并且返回给客户端的状态代码是500。
我的中间件看起来像这样:
public async Task Invoke(HttpContext context)
{
try
{
await _next.Invoke(context);
}
catch (Exception exception)
{
// context.Response.StatusCode == 200
throw;
}
}
看起来将异常转换为500的逻辑发生在中间件管道的后续步骤中。
Configure
中的Startup.cs
方法如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//app.UseExceptionHandler("/Home/Error");
app.UseMiddleware<MyMiddleware>();
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
请注意,我没有使用UseExceptionHandler
。