如何在.NET 5的Azure Functions中仅返回纯JSON数据
.NET 5 Azure Functions HttpTrigger返回纯JSON解决方案
问题原因
.NET 5对应的Azure Functions采用隔离工作进程模型,若直接返回OkObjectResult、JsonResult等ASP.NET Core原生ActionResult类型,隔离进程宿主会将整个Result对象完整序列化返回,才会出现目标JSON被包裹在Value字段、额外携带Formatters、StatusCode等多余字段的情况。
标准实现方案
方案1:使用HttpResponseData构造响应(官方推荐,最稳定)
这是隔离进程模型下的原生支持方案,直接写入JSON内容即可返回纯结构:
using System.Net; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; public static class TestFunction { [Function("ReturnJsonFunction")] public static async Task<HttpResponseData> Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req, FunctionContext executionContext) { // 你的业务数据对象 var resultObj = new { MyValueOne = true, MyValueTwo = 8 }; // 构造200状态码响应 var response = req.CreateResponse(HttpStatusCode.OK); // 自动序列化对象为JSON,自动设置application/json响应头 await response.WriteAsJsonAsync(resultObj); return response; } }
方案2:保留ActionResult返回风格,添加HttpResponseBody特性
如果你希望沿用ASP.NET Core的IActionResult返回写法,只需要在函数返回值上添加[return: HttpResponseBody]特性,告知宿主直接将Result的内容作为响应体返回,无需序列化整个Result对象:
using Microsoft.AspNetCore.Mvc; using Microsoft.Azure.Functions.Worker; using Microsoft.Azure.Functions.Worker.Http; public static class TestFunction { [Function("ReturnJsonFunction")] [return: HttpResponseBody] public static IActionResult Run( [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")] HttpRequestData req, FunctionContext executionContext) { var resultObj = new { MyValueOne = true, MyValueTwo = 8 }; return new OkObjectResult(resultObj); } }
补充说明
若后续升级到.NET 6及以上版本,选择进程内运行模型的Azure Functions,直接返回OkObjectResult即可正常输出纯JSON,不需要额外处理。
内容的提问来源于stack exchange,提问作者ChrisHDog
相关产品推荐
相关产品推荐

