格式化 webapi 响应 .net 核心
Posted
技术标签:
【中文标题】格式化 webapi 响应 .net 核心【英文标题】:format webapi response .net core 【发布时间】:2018-02-26 14:27:39 【问题描述】:我正在创建一个 .net 核心 API。目前它运作良好,但我想在答案中提供更多有用的信息,以便客户可以直接消费所述信息而找不到正确的方法。
我有一个通用驱动程序,它现在返回一个包含三个对象的向量,其中包含数据库中的流派信息:
[HttpGet]
public IEnumerable<Gender> GetAll()
List<Gender> GenderModel = new List<Gender>();
genderService.GetGender().ToList().ForEach(u =>
Gender genero = new Gender
(
u.Id,
u.Name
);
GenderModel.Add(gender);
);
return GenderModel.ToList();
答案如下:
[
"id": 1,
"value": "Masculino"
,
"id": 2,
"value": "Femenino"
,
"id": 3,
"value": "Otros"
]
但是,我希望答案是这样的:
"results": [
"id": 0,
"value: "Otro"
,
"id": 1,
"value": "Masculino"
,
"id": 2,
"value": "Femenino"
],
"info":
"results": 3,
"version": "1.0"
显然,您想要作为另一个 JSON 对象或在 info 对象中添加的任何其他信息也必须发送。我的问题是如何撰写该答案。 另一件不太清楚的事情是,来自 .net 核心 webapi 的响应是矢量格式,里面有对象,通常我使用的所有 api 都是 JSON 中的响应,里面有其他 JSON 对象,我使用没有问题这种格式在前端,但我开始怀疑。
【问题讨论】:
【参考方案1】:您应该更改返回对象。 ActionResult 包装你的回应 ASP.net core return Json with status code
[HttpPost]
public new async Task<IActionResult> Get([FromBody] QueryParams parameters)
List<Gender> GenderModel = new List<Gender>();
genderService.GetGender().ToList().ForEach(u =>
Gender genero = new Gender
(
u.Id,
u.Name
);
GenderModel.Add(gender);
);
return Ok(GenderModel.ToList();
接下来,如果您想在响应中提供更多详细信息,请使用 ActionFilter in
public void OnActionExecuted(ActionExecutedContext context)
// do something after the action executes
// your reponse is in context.response.content
【讨论】:
谢谢,这与 Yared 的回答相结合就是解决方案!【参考方案2】:创建 POCO 类来建模 api 响应:
public class ApiResponse
public object Results get; set;
public object Info get; set;
//Implementation of ApiResponse
[HttpGet]
public ApiResponse GetAll()
var data = genderService.GetGender().Select(g =>
new Gender()
Id = g.Id,
Name = g.Name
).ToList();
var apiResponse = new ApiResponse();
apiResponse.Results = data;
apiResponse.Info = new Results = data.Length, Version = "1.0";
return apiResponse;
【讨论】:
以上是关于格式化 webapi 响应 .net 核心的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net WebAPI配置接口返回数据类型为Json格式
Asp.Net WebAPI配置接口返回数据类型为Json格式
模型绑定不适用于 asp.net 核心 Web api 控制器操作方法中的 Stream 类型参数。(即使使用自定义流输入格式化程序)