一、在asp.net core的webapi可以指定接口的action動作類型,動作特性主要有Get,Post,Put,Delete,Head,Options,Patch,Trace,其中Get,Post,Delete是比較常用的
1、Get:通常用于數據查詢,請求參數一般是地址欄上的QueryString獲取,請求參數默認為[FromQuery],該動作屬于冪等操作①。
2、Post:通常用于表單數據提交,比如訂單提交等,請求參數默認為[FromForm],該動作屬于非冪等操作②。
3、Put:通過用于保存數據,比如編輯,修改等操作,請求參數默認為[FromBody],該動作屬于冪等操作。
4、Delete:通常用于數據刪除,請求參數默認為[FromBody],該動作屬于冪等操作。
5、Head: 與get方法類似,不返回message body內容,僅獲取資源部分內容(content-type),該動作屬于冪等操作
6、Options:通常用于Url驗證,驗證接口是否正常,該動作屬于冪等操作
7、Patch:與Put類似,通過用于部分數據更新,該動作屬于冪等操作
8、Trace:回顯服務器收到的請求,客戶端能看數據在哪些中間服務器,該動作屬于冪等操作
二、在asp.net core的webapi可以指定接口的參數來源特性,常用特性包括FromForm,FromQuery,FromBody,FromRouter,FromHeader,FromServices
1、FromFrom:從提交的表單數據中獲取參數,通常在Content-Type為application/x-www-form-urlencoded或multipart/form-data時使用。當請求屬于表單提交時,必須給參數加上FromForm特性,否則會報400錯誤。通常用表單提交,文件上傳等操作。代碼示例如下:
[HttpPost("api/createorder")] public IActionResult CreateOrder([FromForm] order) { //訂單提交 }
2、FromQuery:從鏈接地址Uri中獲取參數,一般用于Get請求,代碼示例如下:
[HttpGet("api/users")] public IActionResult GetUsers([FromQuery]string sortOrder, [FromQuery]int page) { // 使用sortOrder和page參數查詢用戶列表并返回結果 }
3、FromBody:從請求的body中獲取參數,通過用于JSON格式內容提交,通常在Content-Type為application/json時使用。
[HttpPost("api/saveuser")] public IActionResult Save([FromBody] UserDto User) { // 保存用戶信息 }
4、FromRouter:從路由中獲取參數,比如HttpGet("api/users/{userId}")這個路由,其中{userId}就是動態參數,使用FromRoute就可以獲取該參數,示例代碼如下:
[HttpGet("api/users/{userId}")] public IActionResult GetUser([FromRoute] int userId) { // 使用 userId 參數查詢用戶信息并返回結果 }
5、FromHeader:從請求的Header里面獲取參數,比如獲取用戶的Token信息,Content-Type等在Request Header里面的內容
6、FromServices:可以在控制器的方法參數中直接解析服務,而無需在構造函數中注入服務。這種方式簡化了服務解析過程,提高了代碼的可讀性和可維護性,并且便于進行單元測試?,示例代碼如下:
public IActionResult MyAction([FromServices] IMyService myService) { // 使用myService進行操作 return View(); }
7、一個方法指定不同的參數來源,代碼如下:
using System.Net.Http; using System.Web.Http; public class MyApiController : ApiController { public IHttpActionResult GetData([FromQuery] MyQueryModel queryModel, [FromBody] MyFormModel formModel) { // 在這里處理queryModel和formModel // 比如保存到數據庫或者返回數據 return Ok(); } } public class MyQueryModel { public string QueryParam1 { get; set; } public string QueryParam2 { get; set; } } public class MyFormModel { public string FormData1 { get; set; } public string FormData2 { get; set; } }
① 冪等操作:指方法多次重復執行時,所產生的影響和第一次執行時所產生的影響是相同的
②非冪等操作:是指方法每次的執行結果會產生不一樣的影響
浙公網安備 33010602011771號