asp.net core中webapi接口的动作与参数
一、在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; }
}
① 幂等操作:指方法多次重复执行时,所产生的影响和第一次执行时所产生的影响是相同的
②非幂等操作:是指方法每次的执行结果会产生不一样的影响
asp.net core中webapi接口的动作与参数的更多相关文章
- C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法
C#调用接口注意要点 在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...
- ASP.NET Core MVC/WebAPi如何构建路由?
前言 本节我们来讲讲ASP.NET Core中的路由,在讲路由之前我们首先回顾下之前所讲在ASP.NET Core中的模型绑定这其中有一个问题是我在项目当中遇见的,我们下面首先来看看这个问题. 回顾A ...
- 【懒人有道】在asp.net core中实现程序集注入
前言 在asp.net core中,我巨硬引入了DI容器,我们可以在不使用第三方插件的情况下轻松实现依赖注入.如下代码: // This method gets called by the runti ...
- Asp.Net Core中服务的生命周期选项区别和用法
在做一个小的Demo中,在一个界面上两次调用视图组件,并且在视图组件中都调用了数据库查询,结果发现,一直报错,将两个视图组件的调用分离,单独进行,却又是正常的,寻找一番,发现是配置依赖注入服务时,对于 ...
- 玩转ASP.NET Core中的日志组件
简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...
- [译]ASP.NET Core中使用MediatR实现命令和中介者模式
作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9866068.html 在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何 ...
- ASP.NET Core 中的SEO优化(3):自定义路由匹配和生成
前言 前两篇文章主要总结了CMS系统两个技术点在ASP.NET Core中的应用: <ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存> <ASP.NET ...
- C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入
C# 嵌入dll 在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...
- Asp.Net Core 中IdentityServer4 授权中心之应用实战
一.前言 查阅了大多数相关资料,查阅到的IdentityServer4 的相关文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...
- Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式
一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...
随机推荐
- (NLP)关键词提取之——TF-IDF解析
关键词提取--TF-IDF 1 TF-IDF定义 概要 tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技 ...
- MCP SSE交互完整过程
有关MCP的介绍文章很多,本文不细说,做一个时序图将完整过程说清楚.MCP协议主要通过两种技术实现:标准输入输出(stdio)和服务器发送事件(SSE),stdio(标准输入输出)是MCP协议在本地或 ...
- Faray 数列问题
首先,Farey 数列 \(F_n\) 表示分母不超过 \(n\) 的所有既约真分数按大小顺序排列的集合,形式化来说 \[F_n = \left\{\frac{p}{q} \bigg\vert 0 & ...
- 如何优雅的关闭channel?
一.channel使用存在的不方便地方 1.在不改变channel自身状态的情况下,无法获知一个channnel是否关闭. 2.关闭一个已经关闭的channel,会导致panic.因此,如果关闭cha ...
- 数栈大数据组件:Hive优化之配置参数的优化
Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主要因素有 ...
- 袋鼠云数栈DTinsight与10家信创厂家完成产品兼容互认证,携手共建信创生态圈
信创产业是国家数据安全.网络安全的基础,也是"新基建"的重要内容,它将成为拉动经济发展的重要抓手之一.随着国际竞争形势发生新的变化,力争掌握核心科技的"自主可控" ...
- 读书笔记《Linux内核完全注释》第二章硬件部分
能源及电源,有了电能就可以控制电子管的通与不通,从而实现与.或.非.异或.位移.脉冲.传输.存储等基础功能. 1:CPU通过系统总线(3合1的通信总线)与其他外设相接. 大多数控制器.控制卡都集成 ...
- Blazor学习之旅 (14) Blazor WebAssembly
在上一篇我们学习了如何创建和使用Razor类库,这一篇我们了解下WebAssembly是什么,以及创建第一个Blazor WebAssembly应用. 什么是WebAssembly? WebAssem ...
- 设置div 内容不会换行 显示滚动条
overflow-x: scroll; display: inline-block; white-space: nowrap; 内容不能脱离文档流否则还是会把div 撑开
- C# 字符串 MD5 转Base64 (PHP 的编码一样)
https://www.cnblogs.com/xiaochu/p/4402195.html MD5加密字符串并转化为base64(C#和PHP代码相同实现) -------PHP------代码-- ...