Ras*_*usW 5 azure azure-functions
我正在使用Azure Function App(v2),该程序在同一Function App中具有许多不同的功能。
它将被部署在多个Azure区域中,我想添加一个自定义标头,以指示哪个区域满足了请求。
我知道我可以让每个函数返回HttpResponseMessage包含自定义标头的函数。我不想将代码复制到每个功能中,而是希望将其集中在整个Function App项目中。返回的另一个缺点HttpResponseMessage是我想使用IActionResult,因此可以使用JsonResult或OkObjectResult和类似的返回类型。
对于ASP.NET MVC项目,我可以添加一个添加了标题的中间件,或者使用来添加标题web.config。在功能应用程序中似乎都不可行。
如何做到这一点而不必HttpResponseMessage在每个函数的Run方法内返回并添加标头?
bvp*_*vpb 24
我能够HttpResponse通过请求的访问对象来做到这一点HttpContext.
例如:
req.HttpContext.Response.Headers.Add("ETag", entity.ETag);
return new OkObjectResult(entity);
Run Code Online (Sandbox Code Playgroud)
现在可以注入中间件,将自定义标头添加到函数响应中。
登记
public static void Main()
{
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults(workerApplication =>
{
workerApplication.UseWhen<StampHttpHeaderMiddleware>((context) =>
{
// We want to use this middleware only for http trigger invocations.
return context.FunctionDefinition.
InputBindings.Values.First(
a => a.Type.EndsWith("Trigger")).Type == "httpTrigger";
});
})
.Build();
host.Run();
Run Code Online (Sandbox Code Playgroud)
执行
internal sealed class StampHttpHeaderMiddleware : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
context.GetHttpResponseData()?.Headers.Add("x-myCustomHeader", "custom header value");
}
}
Run Code Online (Sandbox Code Playgroud)
(代码改编自GitHub示例)
| 归档时间: |
|
| 查看次数: |
976 次 |
| 最近记录: |