[英]How to have optional request model properties in ASP.NET Web API 2?
[英]How to make optional Model Class Properties in Asp.Net Web Api
我有一个 model class 看起来像,
public string EmpID { get; set; }
public string Mobile { get; set; }
public string Email { get; set; }
public string OfficeAddress { get; set; }
public string City { get; set; }
public string State { get; set; }
但是在我的 Api 响应中,我想根据条件发送,如果条件 1 满足则发送以下响应,
{
"EmpID":"1",
"Email":"abc@gmail.com"
}
如果条件 2 满足,则发送以下响应,
{
"EmpID":"1",
"Mobile":"1234567890"
"Email":"abc@gmail.com"
}
else
{
//send full model class property
}
//注意:我在model class中使用了JsonIgnore属性。 但在我的情况下它不起作用。 有没有办法忽略 controller 或业务逻辑层中的属性?
从您的示例中,您似乎想根据条件包含一个属性。 如果我没记错的话,如果值为 null,JSON 将不会在响应中包含该属性。 但是,像 Swagger 这样的文档生成器可能仍包含该属性,以防止客户端获取不完整的数据对象。 不过,我不是 100% 的。
也就是说,根据您定义响应的方式,您的代码应该按原样正常运行。
您可以尝试定义一个单独的响应 model,其中您将Mobile
属性定义为可为空,以及任何其他可能为 null 的属性。 然后在您的 controller 中,您在 map 业务 model 到您的响应 Z20F35E630DAF44DBFA4C3F68F 通过手动初始化或返回该 Z20F35E630DAF44DBFA4C3F68F。 您的代码如下所示:
public async Task<ActionResult<ResponseModel>> GetResponseModel()
{
var businessModel = await businessManager.GetBusinessModel();
if (<condition1>) {
return new ResponseModel
{
EmpId = businessModel.EmpId,
Email = businessModel.Email
};
} else if (<condition2>) {
return new ResponseModel
{
EmpId = businessModel.EmpId,
Mobile = businessModel.Mobile,
Email = businessModel.Email
};
} else {
// return full BusinessModel as ResponseModel
}
}
如果使用 AutoMapper,您可以将new ResponseModel {...}
替换为AutoMapperField.Map<ResponseModel>(businessModel)
。
[JsonIgnore]
指示 (De-)Serializer 在序列化或反序列化到 JSON 时忽略属性,但据我所知,.NET 在 ZDB974238714CA8DE634A7CE1D08 响应中忽略了这些属性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.