在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
时,响应消息已经开始发送了吗?发生此错误的原因是什么?
答案 0 :(得分:5)
当内容被写入响应正文流时,会发送标题,因此您无法再次更改标题...因此,如果您再次设置状态代码,则可能会在中间件中抛出异常以指示此情况...
BTW这个异常会导致您看到的504(就像目前没有响应缓冲层可以捕获这些异常并返回500内部服务器并显示错误消息)...您可以尝试 - catch块来捕获异常消息,看看它说的是什么..