1. 程式人生 > 其它 ><二>Asp.netcore MVC 模型(Model)

<二>Asp.netcore MVC 模型(Model)

一、模型繫結介紹

1、ASP.NET Core MVC 中的模型繫結將資料從 HTTP 請求對映到操作方法引數。引數既可以是簡單型別, 例如字串、 整數或浮點, 也可以是複雜型別。

  • Form values: 通過 HTTP POST 請求傳送的表單資料(包括 jQuery POST 請求)。
  • Route values: 由 routing 提供的路由資料集。
  • Query strings: URI 的查詢字串的 部分。

2、通過特性自定義模型繫結行為,當需要覆蓋模型繫結的預設行為時, 特性是非常有用的工具。

  • BindRequired]: 如果不發生繫結, 將新增模型狀態錯誤。
  • BindNever]: 告訴模型繫結器從不繫結到此引數。
  • [FromHeader]、[From Query]、[FromRoute]、[FromForm]:使用這些來指定應用的確切繫結源
  • FromServices]: 此特性使用依賴注入來繫結服務的引數。
  • [FromBody]: 使用配置的格式化程式繫結請求主體中的資料,基於 請求的內容型別選擇格式化器。
  • [ModelBinder]: 用於 覆蓋預設模型繫結器、 繫結源和名稱。

二、模型驗證

在應用程式將資料儲存到資料庫之前, 應用程式必須驗證資料。 對於資料必須檢查其是否存在潛在的安全隱患, 驗證型別和大小是否正確並且符合所制定的規則。 儘管驗證的實現可能是冗餘且煩瑣的, 但卻是有必要的。 在MVC 中, 驗證可以發生在客戶端和伺服器端。驗證特性是配置模型驗證的 種方法,因此在概念上類似於對資料庫表中的欄位進行驗證。這包括諸如分配資料型別或必填欄位的約束。

1、常見的內建驗證屬性:

  • [CreditCard]: 驗證屬性是否為信用卡格式。
  • [Compare]: 驗證模型中的兩個屬性是否匹配。
  • [EmailAddress]: 驗證屬性是否為電子郵件格式。
  • [Phone]: 驗證屬性是否為電話號碼格式。
  • [Range]: 驗證屬性值是否在給定範圍內。
  • [Regular Expression]: 驗證資料是否與指定的正則表示式匹配。
  • [Required]: 必填的屬性。
  • [StringLength]: 驗證字串屬性的最大長度。
  • [Url]: 驗證屬性是否為網址格式。
[Required]
[stringLength(1000)]
public string
Descrip七ion{ getset; }

模型驗證發生在每個控制器的操作被呼叫之前, 而檢查 Mode!State.IsValid 和做出適當的反應是操作方法的職責。 

2、自定義驗證。實現自定義驗證的方法非常簡單,只需繼承 VaLidationAttribute, 並且重寫 lsValid 方法。例子,定義一個年份不超過1960的驗證

[ClassicMovie (1960)] 
public DateTimeReleaseDate { get; set; }
public class ClassicMovieAttribute : ValidationAttribute, IClientModelValidator
{
    private int _year; 
    public ClassicMovieAttribute(int Year) 
  {
         _year = Year;
    } 
    protected override ValidationResult IsValid (object value, ValidationContext validationContext)
{
     Movie movie = (Movie)validationContext.Objec七Instance;
     if (movie.Genre ==Genre.Classic && movie.ReleaseDate.Year > _year)
    {
          eturn new ValidationResult(GetErrorMessage());
    }
    return ValidationResult.Success;
}
}