我在Azure函数上有一个过滤器,它在主函数操作完成后立即执行一些任务。
public async Task<IActionResult> DoStuff(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "notImportant")]
HttpRequest req,
ClaimsPrincipal principal)
{
string bodyContent = await new StreamReader(req.Body).ReadToEndAsync(); //Always has content
}
我的滤镜是这样的:
public class TraceAuditFilter : IFunctionInvocationFilter
{
public TraceAuditFilter()
{
}
public async Task OnExecutedAsync(FunctionExecutedContext executedContext, CancellationToken cancellationToken)
{
var request = (HttpRequest)executedContext.Arguments["req"];
string body = new StreamReader(req.Body).ReadToEnd(); //Always Empty
}
}
我的过滤器成功触发,但是过滤器方法中的'body'总是空的。你知道是什么让它复位的吗?
我们需要添加函数过滤器类作为属性。
这可能是一个没有在函数中调用过滤器的原因。
您需要将[TraceAuditFilter]
添加到函数中,以便过滤器可以通过。
请参阅以下文章以获得深入解释:-IFunctionInvocationFilter
函数过滤器