.NET Core WEB API接口參數模型綁定


.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" };
}

測試

略,自己去測試吧


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM