gpt4 book ai didi

asp.net - 在 ASP.NET Core 中间件中设置响应状态

转载 作者:行者123 更新时间:2023-12-02 05:57:18 27 4
gpt4 key购买 nike

我有一个中间件,它会向客户端隐藏异常,并在出现任何异常时返回 500 错误:

public class ExceptionHandlingMiddleware
{
private readonly RequestDelegate _next;

public ExceptionHandlingMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task Invoke(HttpContext context)
{
try
{
await _next.Invoke(context);
}
catch (Exception exception)
{
var message = "Exception during processing request";
using (var writer = new StreamWriter(context.Response.Body))
{
context.Response.StatusCode = 500; //works as it should, response status 500
await writer.WriteAsync(message);
context.Response.StatusCode = 500; //response status 200
}
}
}
}

我的问题是,如果我在写入正文之前设置响应状态,客户端将看到此状态,但如果我在将消息写入正文之后设置状态,客户端将收到状态为 200 的响应。

有人可以解释一下为什么会发生这种情况吗?

附注我使用的是 ASP.NET Core 1.1

最佳答案

当您了解 HTTP 的工作原理时,这是设计使然。

header 位于数据流的开头(请参阅 wiki example )。一旦发送数据,您就无法更改/修改 header ,因为数据已经通过线路发送。

如果您想稍后设置它,则必须缓冲整个响应,但这会增加内存使用量。这是a sample关于如何将流交换为内存流。

关于asp.net - 在 ASP.NET Core 中间件中设置响应状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41966599/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com