Azure Functions 中间件未将请求转发到实际函数

问题描述 投票:0回答:1

我想对我的函数进行身份验证(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();
}

有什么可能出问题的想法吗?

谢谢

azure azure-functions
1个回答
0
投票

我认为这应该解决它:

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
    适用于早期类型。

您将两者结合使用,我猜想每种设置都各有一半。

更多信息请参见:https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide?tabs=windows#aspnet-core-integration

© www.soinside.com 2019 - 2024. All rights reserved.