在将我的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
的分支上。
在.NET 5中将IActionResult与Azure函数一起使用?
在.NET 5中,不能使用Azure函数返回IActionResult
。或者更一般地,您不能使用隔离流程模型使用Azure函数返回IActionResult
。文件引用:
对于HTTP触发器,必须使用HttpRequestData和HttpReponseData来访问请求和响应数据。这是因为在进程外运行时,您没有访问原始HTTP请求和响应对象的权限。
您需要返回HttpResponseData
而不是IActionResult
。这里是示例代码。