惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
H
Help Net Security
GbyAI
GbyAI
博客园_首页
G
Google Developers Blog
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
月光博客
月光博客
美团技术团队
B
Blog RSS Feed
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
博客园 - 叶小钗
有赞技术团队
有赞技术团队
T
The Blog of Author Tim Ferriss
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
云风的 BLOG
云风的 BLOG
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
P
Proofpoint News Feed

博客园 - IT之家

关于antd前端组件a-select组件选择无效的问题处理记录 antd前端页面实现浏览器中PDF文件预览(不使用第三方插件 ) swagger文档生成html静态文档 根据Word模板导出word文档,包含文本标签替换为图片,生成列表数据,以及标签替换等功能 .NETCore文件上传将文件保存到docker容器以外的文件夹 liunx服务器通过ssh实现异地备份 mysql常见错误 liunx下自动备份文件夹 mysql在liunx下面的自动备份 关于.net6.0中swagger偶尔无法加载接口的问题笔记 VUE对象数组,和普通数组的常用方法 关于VUE项目请示接口报错:Error: Network Error at createError (createError.js:17) at XMLHttpRequest.handleError的问题处理 解决.net6 Docker容器 DateTime.Now 获取时间相差8小时问题(转载) CronExpression使用笔记 vue项目发布到docker nginx的方法总结 VUE项目开发报错:Error in render: "TypeError: Cannot read property 'country' of undefined" vs2022升级后打开项目报错预定义类型system.void未定义或导入” 关于.net6项目发布到docker(nginx)踩到的一些坑 关于.netcore6图片处理(生成缩略图、验证码、加水印)发布到docker(liunx)踩到的坑
asp.net core中webapi接口的动作与参数
IT之家 · 2024-11-27 · via 博客园 - IT之家

一、在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-urlencodedmultipart/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; }
}

① 幂等操作:指方法多次重复执行时,所产生的影响和第一次执行时所产生的影响是相同的

②非幂等操作:是指方法每次的执行结果会产生不一样的影响