[英]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.