gpt4 book ai didi

c# - 如何在开始写入 ASP.NET Core 中的 HttpContext.Response.Body 流后更改 http 状态代码?

转载 作者:太空宇宙 更新时间:2023-11-03 22:39:15 25 4
gpt4 key购买 nike

我经常看到写入 HttpContext.Response.Body 流是一种不好的做法(或者使用 PushStreamContentStreamContent 作为a HttpMessageResponse) 因为如果发生错误,您将无法更改 HTTP 状态代码。

是否有任何解决方法来实际执行 async 写入输出流,同时能够更改 HTTP 状态代码以防操作出错?

最佳答案

是的。最佳实践是编写中间件。例如:

public class ErrorWrappingMiddleware
{
private readonly RequestDelegate next;

public ErrorWrappingMiddleware(RequestDelegate next)
{
this.next = next;
}

public async Task Invoke(HttpContext context)
{
try
{
await next.Invoke(context);
}
catch (Exception exception)
{
context.Response.StatusCode = 500;
await context.Response.WriteAsync(...); // change you response body if needed
}
}
}

并将它们注入(inject)您的管道

public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
...
app.UseMiddleware<ErrorWrappingMiddleware>();
...
}

当然,您可以根据需要更改中间件中的逻辑,包括根据需要更改响应代码。此外,您可以抛出您自己的异常类型,例如 MyOwnException,然后在中间件中捕获并调用您自己的与您的异常相关的逻辑。

关于c# - 如何在开始写入 ASP.NET Core 中的 HttpContext.Response.Body 流后更改 http 状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53252743/

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