一、在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; } }
① 幂等操作:指方法多次重复执行时,所产生的影响和第一次执行时所产生的影响是相同的
②非幂等操作:是指方法每次的执行结果会产生不一样的影响
标签:webapi,core,asp,动作,FromBody,参数,FromQuery,操作,public From: https://www.cnblogs.com/ithome8/p/18572401