为什么在写入正文后更改状态代码会返回504?

时间:2015-03-09 18:19:19

标签: c# owin asp.net-core

在ASP.NET 5中,我似乎以下代码在响应中给出了错误504:

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.Use((next) => {

            return async (context) => {

                context.Response.StatusCode = 200;
                await context.Response.WriteAsync("Hello World");
                context.Response.StatusCode = 201;
                await context.Response.WriteAsync("Status code changed");

            };

        });
    }
}

我知道我们不应该以任意方式更改状态代码,但我的问题是:为什么更改它会产生问题?事实是,评论更改状态代码的行,并使用Response.WriteAsync两次,不会产生任何问题,但更改状态代码会给出。

当我们这样做时,这将返回504状态代码。我认为这与响应发送给客户端的方式有关。这是因为当我们调用Respose.WriteAsync时,响应消息已经开始发送了吗?发生此错误的原因是什么?

1 个答案:

答案 0 :(得分:5)

当内容被写入响应正文流时,会发送标题,因此您无法再次更改标题...因此,如果您再次设置状态代码,则可能会在中间件中抛出异常以指示此情况...

BTW这个异常会导致您看到的504(就像目前没有响应缓冲层可以捕获这些异常并返回500内部服务器并显示错误消息)...您可以尝试 - catch块来捕获异常消息,看看它说的是什么..