.NET Core WEB API
模型綁定方式有以下表格中的幾種:
特性 | 綁定源 |
---|---|
[FromHeader] | 請求標頭 |
[FromQuery] | 請求查詢字符串參數 |
[FromForm] | 請求正文中的表單數據 |
[FromBody] | 請求正文 |
[FromRoute] | 當前請求中的路由 |
[FromServices] | 作為操作參數插入的請求服務 |
FromHeader(請求標頭)
顧名思義就是從Http的Request Headers:中獲取數據。使用示例代碼如下
[HttpGet("TestFromHeader")]
public string TestFromHeader([FromHeader]string headerParam)
{
return $"headerParam: {headerParam}";
}
FromQuery(請求查詢字符串參數)
對於復雜類型的參數請求,也就是參數類型為對象時,MVC中間件會默認以把數據轉換為JSON格式。對於Get請求如果想要用URL查詢字符串查詢數據。就得在參數前面加[FromQuery]特性,使用示例代碼如下:
[HttpGet("GetUserModel")]
public IEnumerable<User> GetUserModel([FromQuery]User users)
{
var list = new List<User>
{
new User() { Id = "1", FirstName = "Fname", SecondName = "Sname" },
};
return list;
}
FromForm(請求正文中的表單數據)
[FromForm]特性請求標頭中的Content-Type為form表單形式:Content-Type:"application/x-www-form-urlencoded",示例代碼如下:
[HttpPost("AddUserModel")]
public User UserAddUserModel([FromForm]User users)
{
return users;
}
FromBody(請求正文)
使用[FromBody]特性,MVC中間件會把請求參數默認轉換為JSON格式。所以請求是必須使用JSON格式的數據。示例代碼如下:
[HttpPost("ListAllUserByModel")]
public User ListAllUserByModel([FromBody]User users)
{
return users;
}
FromBody的請求參數使用XML格式的數據
既然MVC中間件默認[FromBody]的參數請求為JSON格式,那可不可以使用XML格式的參數作為請求數據:
1.安裝NuGet包:Install-Package Microsoft.AspNetCore.Mvc.Formatters.Xml
2.在Startup.cs的ConfigureServices方法中添加如下圖所示的方法AddXmlSerializerFormatters:
FromBody指定返回的數據為XML格式
給Request Headers的請求頭加上 Accept: "text/xml" 可以指定返回的數據為xml格式
模型驗證
通過驗證特性可以為模型屬性指定驗證規則。有很多內置驗證特性,也可以自定義驗證特性。
內置特性
以下是一些內置驗證特性:
- [CreditCard]:驗證屬性是否具有信用卡格式。 需要JQuery 驗證其他方法。
- [Compare]:驗證模型中的兩個屬性是否匹配。
- [EmailAddress]:驗證屬性是否具有電子郵件格式。
- [Phone]:驗證屬性是否具有電話號碼格式。
- [Range]:驗證屬性值是否在指定的范圍內。
- [RegularExpression]:驗證屬性值是否與指定的正則表達式匹配。
- [Required]:驗證字段是否不為 null。 有關此屬性的行為的詳細信息,請參閱 [Required]特性。
- [StringLength]:驗證字符串屬性值是否不超過指定長度限制。
- [Url]:驗證屬性是否具有 URL 格式。
- [Remote]:通過在服務器上調用操作方法來驗證客戶端上的輸入。 有關此屬性的行為的詳細信息,請參閱 [Remote]特性。
錯誤消息
通過驗證特性可以指定要為無效輸入顯示的錯誤消息。 例如:
[StringLength(8, ErrorMessage = "Name length can't be more than 8.")]
在內部,特性使用用於字段名的某個占位符調用 String.Format,有時還使用額外占位符。 例如:
[StringLength(8, ErrorMessage = "{0} length must be between {2} and {1}.", MinimumLength = 6)]
示例
- 定義一個Model類
public class UserInfo
{
public int Id { get; set; }
[Required]
[StringLength(20, ErrorMessage = "Name length can't be more than 20.")]
public string Name { get; set; }
[Range(1,120)]
public int Age { get; set; }
[Display(Name = "Birthday")]
public DateTime Birthday { get; set; }
[EmailAddress]
public string Email { get; set; }
[Required]
[StringLength(1000)]
public string Description { get; set; }
}
- 增加一個接口
[HttpPost]
public IEnumerable<string> Post([FromBody] UserInfo userInfo)
{
return new string[] { "result", "ok" };
}
測試
略,自己去測試吧