为什么写入正文后更改状态码 returns 504?
Why changing the status code after writing to the body returns 504?
在 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
两次,不会出现任何问题,但更改状态代码会出现问题。
当我们这样做时 returns 504 状态代码。我认为这与将响应发送给客户端的方式有关。发生这种情况是因为当我们调用 Respose.WriteAsync
时,响应消息已经开始发送了吗?出现此错误的原因是什么?
Headers 在内容写入响应 body 流时发送,因此您不能再次更改 headers ...因此,如果您再次设置状态代码, 然后可能在中间件中抛出一个异常来指示这个...
顺便说一句,这个异常会导致您看到的 504(就像目前没有响应缓冲层可以捕获此类异常和 returns 带有错误消息的 500 内部服务器)...您可以放置一个 try-catch 块来捕获异常消息并查看其内容..
在 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
两次,不会出现任何问题,但更改状态代码会出现问题。
当我们这样做时 returns 504 状态代码。我认为这与将响应发送给客户端的方式有关。发生这种情况是因为当我们调用 Respose.WriteAsync
时,响应消息已经开始发送了吗?出现此错误的原因是什么?
Headers 在内容写入响应 body 流时发送,因此您不能再次更改 headers ...因此,如果您再次设置状态代码, 然后可能在中间件中抛出一个异常来指示这个...
顺便说一句,这个异常会导致您看到的 504(就像目前没有响应缓冲层可以捕获此类异常和 returns 带有错误消息的 500 内部服务器)...您可以放置一个 try-catch 块来捕获异常消息并查看其内容..