当从我的 Azure 函数返回 OkObjectResult 时,如下所示:
[Function("ReturnFoo")]
public async Task<IActionResult> ReturnFoo([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
HttpRequestData req,
FunctionContext executionContext)
{
object o = new
{
Foo = "bar"
};
return new OkObjectResult(o)
}
它将此 JSON 返回给客户端:
{
"Value": {
"Foo": "bar"
},
"Formatters": [],
"ContentTypes": [],
"DeclaredType": null,
"StatusCode": 200
}
如何返回没有这些额外内容的 json? 我只想:
{
"Value": {
"Foo": "bar"
}
}
或者,更好的是:
{
"Foo": "bar"
}
我知道我可以将 Azure 函数的返回类型更改为“对象”,但我真的想返回 IActionResult,以便我可以轻松地从同一函数返回其他消息。
我浪费了很多时间试图让它与自定义 JsonFormatters 一起工作,并尝试使用 JsonResult (它也有臃肿的属性),但它不起作用,我怀疑我错过了一些非常明显和简单的东西。感谢支持。
对于具有独立函数的 .NET 5+,您打算使用
HttpResponseData
,这是一种更加程序化的返回数据方式。 https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide#bindings
希望 API 将来能够改进。
有关类似问题,请参阅:在 .NET 5 中将 IActionResult 与 Azure Functions 结合使用?
如果您使用 https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore 包,您应该会发现 OkObjectResult 的处理方式如您所期望的那样
[Function("Function1")]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequest req)
{
_logger.LogInformation("C# HTTP trigger function processed a request.");
return new OkObjectResult("Welcome to Azure Functions!");
}
现在返回:
Welcome to Azure Functions!
使用此包后,您的 Program.cs 需要稍有不同。 VS 中的模板已经有了这些更改,例如,创建一个全新的独立项目后,Program.cs 如下所示:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
})
.Build();
host.Run();