Build JSON response in Web API controller

前端 未结 2 385
日久生厌
日久生厌 2020-12-17 10:55

In a WebAPI project, i have a controller that checks a status of a product, based on a value the user enters.

Lets say they enter \"123\" and the response should be

相关标签:
2条回答
  • 2020-12-17 11:09

    Just as raderick mentioned, you don't need to create your own custom JSON infrastructure.

    public class ProductApi
    {
        public int Id {get;set;}
        public string Name { get; set; }
    }
    
    public class ResponseDTO
    {
        public int Status {get;set;}
        public List<ProductApi> { get; set; }
    }
    

    And in your API action, return like this:

    [Route("{value:int}")]
    public ResponseDTO GetProducts(int value)
    {
        ResponseDTO result = ...// construct response here 
    
        return result;
    }
    
    0 讨论(0)
  • 2020-12-17 11:14

    So here are the changes for your post:

    First, you should make your api return Json by default when you pass a text/html request (is this you are looking for?), adding this line to your WebApiConfig class:

    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
    

    Second, I changed the code to return a real object, impersonating your response:

    public class ProductApiCollection
    {   
        public ProductApi[] Products { get; set; }      
        public byte Status { get; set; }
    }
    
    public class ProductApi
    {
        public string Name { get; set; }
    }
    

    Method body:

    public ProductApiCollection Get()
    {
        var result = new ProductApiCollection();
        var dbProducts = db.Products;
        var apiModels = dbProducts.Select(x => new ProductApi { Name = x.Name } ).ToArray();
        result.Products = apiModels;
    
        var status = db.Status.Any() ? 1 : 0;
        result.Status = status;
    
        return result;
    }
    

    This will results in the following example json:

    {
      "Products": [
        {
          "Name": "Pork"
        },
        {
          "Name": "Beef"
        },
        {
          "Name": "Chicken"
        },
        {
          "Name": "Salad"
        }
      ],
      "Status": 1
    }
    

    I strongly advise you not to do manual formatting for such things, and rely on built-in and 3rd party libraries. Otherwise, you will be reinventing the things already available, tested and ready to work.

    0 讨论(0)
提交回复
热议问题