ASP.NET Core中间件中的状态代码错误

Tho*_*dal 5 asp.net middleware asp.net-core

我在一个我创建的简单中间件中遇到了问题.响应的状态代码是200,即使我在控制器操作中抛出异常并且返回给客户端的状态代码是500.

我的中间件看起来像这样:

public async Task Invoke(HttpContext context)
{
    try
    {
        await _next.Invoke(context);
    }
    catch (Exception exception)
    {
        // context.Response.StatusCode == 200
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

看起来将异常转换为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?}");
    });
}
Run Code Online (Sandbox Code Playgroud)

请注意,我没有使用UseExceptionHandler.