格式化webapi响应.net核心

时间:2017-09-18 06:18:24

标签: rest api .net-core

我正在创建一个.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对象,我没有问题。这种格式在前端,但我开始怀疑。

2 个答案:

答案 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 
    }