代码之家  ›  专栏  ›  技术社区  ›  Jayendran

如何在ASP.NET Web API中使用verbose参数隐藏/显示结果json

  •  1
  • Jayendran  · 技术社区  · 6 年前

    我已经编写了一个ASP.NET Web API,我的要求是基于参数显示完整/部分结果JSON 即,verbose=true

    解释这一要求。

    我现在的JSON是

    无详细信息

    获取方法:

    API/V1/患者?密钥=1

    {
        "user": {           
                "key": 1,
                "suffix": "1",
                "firstName": "Dhanu",
                "lastName": "Kumar",
                "middleName": "",
                "address": {
                    "address1": "uuu",
                    "address2": "TTT",
                    "address3": "xx",
                    "city": "yy"           
                }
            }
    }
    

    带详细信息

    API/V1/患者?键=1&verbose=真

    {
        "user": {           
                "key": 1,
                "firstName": "Dhanu",
                "lastName": "Kumar",
                "middleName": ""
            }
    }
    

    我的 用户.cs

    public UserDTO()
    {
        public int Key { get; set; }
        public string Suffix { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string MiddleName { get; set; }
        public Address Address {get;set;}       
    }
    

    基于verbose参数,我将隐藏/显示JSON中的一些字段。

    有什么办法可以做到这一点吗?

    1 回复  |  直到 6 年前
        1
  •  4
  •   Nkosi    6 年前

    你可以使用继承

    public class UserDTO {
        public int Key { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string MiddleName { get; set; }    
    }
    
    public class VerboseUserDTO: UserDTO {
        public string Suffix { get; set; }
        public Address Address {get;set;}       
    }
    

    并让端点基于提供的参数返回类型。

    //api/v1/patient
    public IHttpActionResult Get(int key, bool verbose = false) {
        //...get data based on key
    
        if(data == nul)
            return NotFound();
    
        if(verbose) {
            var verboseDto = new { 
                user = new VerboseUserDTO {
                    //...populated from data
                }
            };
            return Ok(verboseDto);
        }
    
        var dto = new { 
            user =  new UserDTO {
                //...populated from data    
            }
        };    
        return Ok(dto);
    }