1

鑑於我有一個可爲空GenderID的ASP.NET Web API 2.2模型綁定短路定製模型驗證

public class Employee 
{   
    public int? GenderID { get; set; }  
} 

一個Employee模型,並使用上GenderID定製流利的驗證規則FluenValidation

RuleFor(x=> x.GenderID).NotNull().WithMessage("Please provide a valid Gender"); 

當我POST僱員到以下端點與NULL GenderID

然後該服務返回驗證總結如預期。

[HttpPost("Employee/Create")] 
    public IActionResult Create([FromBody]Employee employee) 
    { 
     try 
     {    
      if (!ModelState.IsValid) 
      { 
       // return validation summary (code omitted for brevity) 
      } 

      var result = _respository.CreateEmployee(employee);    

      return Ok(); 
     } 
    } 

如果我改變員工的模式對非空的GenderID

public class Employee 
{   
    public int GenderID { get; set; }  
} 

然後服務返回不處理自定義驗證400錯誤的請求響應。驗證摘要需要綁定到UI。

將GenderID設爲可爲空的唯一原因是允許從自定義驗證器創建驗證摘要。

如何應用自定義驗證而無需將所有模型屬性設置爲可空?

回答

0

您收到的錯誤請求我認爲是因爲錯誤將null GenderId轉換爲不可空int。與流暢的驗證無關。 我的意見是,如果你期望在請求中收到一個null GenderId,你應該保留GenderId屬性爲空,並讓流利地管理其規則中的錯誤。如果您認爲請求將始終包含非null GenderId,則使GenderId不可爲空。如果GenderId預期始終不爲null,則應該拋出運行時異常,而不是null。

+0

是的我已經解釋了原因,但我試圖在WebAPI中找到一種編程模型,它允許我創建更具代表性的可接受值的命令。當我提到GenderId可以爲空時,隨我的API生成的文檔將會引起誤解。 – puri