.NET Core WEB API中接口參數的模型綁定的理解


  在.NET Core WEB API中參數的模型綁定方式有以下表格中的幾種:

微軟官方文檔說明地址:https://docs.microsoft.com/zh-cn/aspnet/core/web-api/?view=aspnetcore-2.1

特性   綁定源
[FromHeader] 請求標頭
[FromQuery] 請求查詢字符串參數
[FromForm] 請求正文中的表單數據
[FromBody] 請求正文
[FromRoute] 當前請求中的路由
[FromServices] 作為操作參數插入的請求服務

  接下來將對其中一些特性在實際中的使用方式做出簡要說明。首先要新建一個ASP .NET Core WEB API的工程。

FromHeader(請求標頭)

  顧名思義就是從Http的Request Headers:中獲取數據。使用示例代碼如下:

1  [HttpGet("TestFromHeader")]
2 public string TestFromHeader([FromHeader]string headerParam)
3 {
4    return $"headerParam: {headerParam}";
5 }
View Code

 使用https用Url的方式請求訪問,方法返回的結果為空,如下圖所示。並且此時的Request Headers中並沒有headerParam參數。

使用Postman給方法的Request Headers加入 headerParam:10。此時方法返回了結果,如下圖所示。

console日志詳情如下圖:

通過以上測試可以發現,使用參數使用[FromHeader]特性時,沒有給參數賦值時,參數使用的是.NET中類型的默認值,也就是Default(T)。

FromQuery(請求查詢字符串參數)

   對於復雜類型的參數請求,也就是參數類型為對象時,MVC中間件會默認以把數據轉換為JSON格式。對於Get請求如果想要用URL查詢字符串查詢數據。就得在參數前面加[FromQuery]特性,使用示例代碼如下:

1 [HttpGet("GetUserModel")]
2 public IEnumerable<User> GetUserModel([FromQuery]User users)
3 {
4     var list = new List<User>
5     {
6     new User() { Id = "1", FirstName = "Fname", SecondName = "Sname" },
7      };
8      return list;
9 }    
View Code

使用Postman請求結果如下如下:

如果去掉[FromQuery]特性請求數據,就會提示415錯誤,如下圖所示:

對[FromQuery]的請求方式做出總結:

1.如果使用了[FromQuery]特性,必須使用請求查詢字符串作為參數,用JSON格式的數據請求則會報415錯誤。

2.如果去掉[FromQuery]特性,則必須使用JSON格式的數據請求,用請求從查詢字符串作為參數則會報415錯誤。

FromForm(請求正文中的表單數據)

[FromForm]特性請求標頭中的Content-Type為form表單形式:"application/x-www-form-urlencoded",示例代碼如下:

1 [HttpPost("AddUserModel")]
2 public User UserAddUserModel([FromForm]User users)
3 {
4     return users;
5 }
View Code

Postman的請求結果如下:

 

FromBody(請求正文)

 使用[FromBody]特性,MVC中間件會把請求參數默認轉換為JSON格式。所以請求是必須使用JSON格式的數據。示例代碼如下:

1 [HttpPost("ListAllUserByModel")]
2 public User ListAllUserByModel([FromBody]User users)
3 {
4    return users;
5 }
View Code

Postman的請求方式如下圖:

返回結果如下圖:

FromBody的請求參數使用XML格式的數據

既然MVC中間件默認[FromBody]的參數請求為JSON格式,那可不可以使用XML格式的參數作為請求數據:

1.安裝NuGet包:Install-Package Microsoft.AspNetCore.Mvc.Formatters.Xml 

2.在Startup.cs的ConfigureServices方法中添加如下圖所示的方法AddXmlSerializerFormatters:

3.使用Postman的請求方式如下:

返回結果如下圖所示:

FromBody指定返回的數據為XML格式

給Request Headers的請求頭加上 Accept: "text/xml" 可以指定返回的數據為xml格式,Postman的請求方式如下:

Postman的返回結果如下圖所示,通過下圖查看返回了xml的數據。

以上就是個人對請求參數特性的總結。

 


免責聲明!

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



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