azure-functions - IFunctionExceptionFilter 和编写响应

标签 azure-functions

我正在使用 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/

相关文章:

azure - dotnet 发布有时失败并显示 'Metadata generation failed'

node.js - 在POST请求 header 中将Transfer-Encoding设置为分块时,Azure函数(Node.js)返回502错误

azure - 在 Azure 存储资源管理器中哪里可以查看错误详细信息?

python - Azure blob触发器python函数对每个子文件夹执行多次并创建文件的多个副本

azure - 从 Azure Function App 将自定义跟踪消息写入 Application Insight

azure - 找不到主机.json

python - 使用 azure 函数时未找到名为 twilio 的模块

powershell - 使用 Powershell 获取 Azure Function 路由参数(段)

具有事件网格触发器的 Azure 函数被调用两次,而其他 Azure 函数仅发布一次

Azure Functions 与 Docker 镜像错误 : Azure Functions Runtime is unreachable