c# - 在 .NET 5 中将 IActionResult 与 Azure Functions 一起使用?
问题描述
将我的 Azure Functions 项目迁移到 .NET 5 后,它开始将我的响应包装在一个奇怪的包装类中。
例如,考虑以下端点:
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
}
我知道它一定是因为它只是试图序列化对象结果,但我找不到任何关于它应该如何在 .NET 5 中工作的文档。
我的主要功能目前看起来像这样:
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
目前,我的 .NET 5 工作在一个名为feature/signup-flow
.
解决方案
在 .NET 5 中将 IActionResult 与 Azure Functions 一起使用?
您无法IActionResult
使用 .NET 5 中的 Azure Functions返回。或者更一般地说,不能IActionResult
使用隔离进程模型返回 Azure Functions。从文档中引用:
对于 HTTP 触发器,您必须使用 HttpRequestData 和 HttpResponseData 来访问请求和响应数据。这是因为在进程外运行时您无权访问原始 HTTP 请求和响应对象。
而不是IActionResult
,你需要返回HttpResponseData
。示例代码在这里。
推荐阅读
- r - 在 R 中,如何在制作数组时保存日期?
- python - Plotly:如何向烛台图添加交易量
- angular - Angular:在:leave&:enter状态上为嵌套组件设置动画
- gatsby - 字段“图像”不能有选择,因为类型“字符串”没有子字段。- 我错过了什么?
- javascript - 数据标签中的 Highcharts 系列名称
- java - 如何在 Spring Boot 单元测试中配置使用 @Mock 注释的字段
- vba - 选择安装的程序版本
- javascript - js 从不符合模式的参数中删除部分
- c++ - C++ 增加原子浮点数
- ruby - Ruby - 将整数转换为 ASCII 值