我正在创建一个.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对象,我没有问题。这种格式在前端,但我开始怀疑。
答案 0 :(得分: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;
}
答案 1 :(得分:2)
您应该更改返回的对象。 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 public void OnActionExecuted(ActionExecutedContext context)
{
// do something after the action executes
// your reponse is in context.response.content
}