2014-03-06 16 views
2

我們正在使用ASP.NET MVC Web API開發Web API,.NET 4,我們正在使用JSON.NET v 6.0.0.0提交的沒有值的查詢字符串參數用0(零)創建int []

如果我請求提交給我們的API,如:

/API /產品/查找productIdList = & productIdList = & productIdList =

,並請求模型定義爲

[JsonObject] 
public class ProductLookupRequest 
{ 
    [Required(ErrorMessage = "productIdList is a required parameter.")] 
    [MinLength(1, ErrorMessage = "A minimum of one (1) product Id must be specified.")] 
    [MaxLength(50, ErrorMessage = "A maximum of twenty (20) product Ids can be specified.")] 
    public int[] ProductIdList { get; set; } 
} 

和動作的方法來處理該請求具有以下簽名

[HttpGet] 
[ValidateRequestModel] 
public HttpResponseMessage ProductLookup([FromUri]ProductLookupRequest productLookupRequest) 

控制器的動作接收已經ProductIdList填充了3項我們處理零的0

目前各保持的值。ProductLookupRequest對象如果數組包含任何零,則輸出一個HTTP 400錯誤請求。

ValidateRequestModelAttribute檢查模型狀態,如果發現錯誤,則返回HTTP 400錯誤請求,而不輸入操作方法。我想保留這種方法來發送沒有值的查詢字符串參數,這樣我們就不會在控制器的操作方法中執行額外的驗證。

問題: 有沒有一些內置的方式來處理這與模型綁定或通過JSON.NET?或者我是否需要編寫自定義數據註釋來處理此問題;一個檢查查詢字符串參數,如果有任何是空的向ModelState添加一個錯誤使其無效?

+0

可以解決這個使用途徑PARAMS配置或實現自定義模型粘合劑。 – Fals

回答

1

你可以寫你的自定義驗證屬性,並用它裝點ProductIdList:

public class NoNullsAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     int[] values = value as int[]; 
     if (values != null) 
     { 
      foreach (int val in values) 
      { 
      if (val == 0) 
      { 
       return new ValidationResult("zero detected"); 
      } 
      } 
     } 

     return ValidationResult.Success; 
    } 
} 
+0

這爲我解決了;我只是不確定是否有這種做法,或者我必須自己動手。感謝代碼示例(+1) – emgee

+0

@emgee檢查3個項目列表中的0是一個非常自定義的任務,所以我猜沒有比我的示例代碼更簡單了;) – VladL

相關問題