如何在不使用格式化程序等额外内容的情况下返回 OkObjectResult?

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

当从我的 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 (它也有臃肿的属性),但它不起作用,我怀疑我错过了一些非常明显和简单的东西。感谢支持。

c# azure azure-functions json-deserialization
2个回答
2
投票

对于具有独立函数的 .NET 5+,您打算使用

HttpResponseData
,这是一种更加程序化的返回数据方式。 https://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide#bindings

希望 API 将来能够改进。

有关类似问题,请参阅:在 .NET 5 中将 IActionResult 与 Azure Functions 结合使用?


0
投票

如果您使用 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();
© www.soinside.com 2019 - 2024. All rights reserved.