提问者:小点点

在.NET 5中将IActionResult与Azure函数一起使用?


在将我的Azure Functions项目迁移到.NET5之后,它已经开始在一个奇怪的包装类中包装我的响应。

例如,考虑以下endpoint:

public record Response(string SomeValue);

[Function("Get")]
public async Task<IActionResult> Get(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "get-something")]
    HttpRequestData request)
{
    return new OkObjectResult(new Response("hello world"));
}

之前,它会返回:

{
    "someValue": "hello world"
}

但现在,它又回来了:

{
  "Value": {
    "SomeValue": "hello world"
  },
  "Formatters": [],
  "ContentTypes": [],
  "DeclaredType": null,
  "StatusCode": 200
}

我知道这一定是因为它只是尝试序列化对象结果,但我找不到任何文档说明这在.NET5中应该如何工作。

我的主要功能目前看起来是这样的:

public static async Task Main()
{
    var host = new HostBuilder()
        .ConfigureFunctionsWorkerDefaults(x => 
            x.UseDefaultWorkerMiddleware())
        .ConfigureAppConfiguration((_, builder) => builder
            .AddJsonFile("local.settings.json", true)
            .Build())
        .ConfigureServices(ConfigureServices)
        .Build();

    await host.RunAsync();
}

我的项目位于这里,以防有人感兴趣:https://github.com/sponsorkit/sponsorkit.io

目前,我的.NET5工作是在一个名为feature/signup-flow的分支上。


共1个答案

匿名用户

在.NET 5中将IActionResult与Azure函数一起使用?

在.NET 5中,不能使用Azure函数返回IActionResult。或者更一般地,您不能使用隔离流程模型使用Azure函数返回IActionResult。文件引用:

对于HTTP触发器,必须使用HttpRequestData和HttpReponseData来访问请求和响应数据。这是因为在进程外运行时,您没有访问原始HTTP请求和响应对象的权限。

您需要返回HttpResponseData而不是IActionResult。这里是示例代码。