gpt4 book ai didi

azure-functions - IFunctionExceptionFilter 和编写响应

转载 作者:行者123 更新时间:2023-12-04 15:35:54 25 4
gpt4 key购买 nike

我正在使用 Azure 函数并尝试使用 IFunctionExceptionFilter 和 IHttpContextAccessor 编写通用异常过滤器。它有效,我可以在响应中设置 header 变量。但是,无论我尝试什么,响应主体都是空白的。

public abstract class BaseAPI : IFunctionExceptionFilter
{
private readonly IHttpContextAccessor httpContextAccessor;

protected BaseAPI(IHttpContextAccessor httpContextAccessor)
{
this.responseValidator = responseValidator;
}

public async Task OnExceptionAsync(FunctionExceptionContext exceptionContext, CancellationToken cancellationToken)
{
httpContextAccessor.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;
httpContextAccessor.HttpContext.Response.Headers.Append("MyHeader", "Foo"); // this works and appears
await httpContextAccessor.HttpContext.Response.WriteAsync("Some text"); // this is not shown in the response
}
}

我必须做什么才能让 body react 出现?我试过直接使用 Response.Body,但没有任何区别。

最佳答案

我只是在寻找合适的 OnExceptionAsync 实现时偶然发现了这个问题。代码中唯一缺少的是响应内容类型和长度。

    public async Task OnExceptionAsync(FunctionExceptionContext exceptionContext, CancellationToken cancellationToken)
{
var text = "Some text"; // text variable
httpContextAccessor.HttpContext.Response.StatusCode = StatusCodes.Status500InternalServerError;
httpContextAccessor.HttpContext.Response.ContentType = "text/html; charset=UTF-8"; // Missing part
httpContextAccessor.HttpContext.Response.Headers.Append("MyHeader", "Foo");
await httpContextAccessor.HttpContext.Response.WriteAsync(text);
httpContextAccessor.HttpContext.Response.ContentLength = text.Length; // Missing part
}

已在 Firefox、Chrome 和 Edge 中测试。希望对您有所帮助。

更新,来自@ChrisHG,缺少一个字符串

httpContextAccessor.HttpContext.Response.CompleteAsync()

或者,我现在使用的字符串。

await response.WriteAsync(errorMessage, Encoding.UTF8, cancellationToken);

关于azure-functions - IFunctionExceptionFilter 和编写响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769608/

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