我想对我的函数进行身份验证(http 触发)。
目前,我只想请求真正到达函数,但事实并非如此。
我收到以下错误:
System.Private.CoreLib:执行函数时出现异常:Functions.Methods。 Microsoft.Azure.WebJobs.Script.Grpc:无法通过 ForwarderError 代理请求:RequestTimedOut。
这是我的
Program.cs
:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.ConfigureFunctionsWorkerDefaults(builder =>
{
builder.UseMiddleware<Auth>();
})
.Build();
host.Run();
我的auth类如下:
internal class Auth : IFunctionsWorkerMiddleware
{
public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
{
await next(context);
}
}
它到达了
await next(context)
行,但它从未到达实际的函数,即以下代码:
[Function("MyFunc")]
public IActionResult MyFunc([HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "myfunc")] HttpRequest req, FunctionContext executionContext)
{
return new OkResult();
}
有什么可能出问题的想法吗?
谢谢
我认为这应该解决它:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication(builder =>
{
builder.UseMiddleware<Auth>(); // Note your middleware moves to here.
})
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build(); // And note, no use of .ConfigureFunctionsWorkerDefault()
host.Run();
原因是(可以理解!)混合了两种不同类型的隔离函数。
.ConfigureFunctionsWebApplication
是针对新的ASP.NET Core类型,中间件也在这里设置。.ConfigureFunctionsWorkerDefaults
适用于早期类型。您将两者结合使用,我猜想每种设置都各有一半。