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

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

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

asp.net core中webapi接口的动作与参数的更多相关文章

  1. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  2. ASP.NET Core MVC/WebAPi如何构建路由?

    前言 本节我们来讲讲ASP.NET Core中的路由,在讲路由之前我们首先回顾下之前所讲在ASP.NET Core中的模型绑定这其中有一个问题是我在项目当中遇见的,我们下面首先来看看这个问题. 回顾A ...

  3. 【懒人有道】在asp.net core中实现程序集注入

    前言 在asp.net core中,我巨硬引入了DI容器,我们可以在不使用第三方插件的情况下轻松实现依赖注入.如下代码: // This method gets called by the runti ...

  4. Asp.Net Core中服务的生命周期选项区别和用法

    在做一个小的Demo中,在一个界面上两次调用视图组件,并且在视图组件中都调用了数据库查询,结果发现,一直报错,将两个视图组件的调用分离,单独进行,却又是正常的,寻找一番,发现是配置依赖注入服务时,对于 ...

  5. 玩转ASP.NET Core中的日志组件

    简介 日志组件,作为程序员使用频率最高的组件,给程序员开发调试程序提供了必要的信息.ASP.NET Core中内置了一个通用日志接口ILogger,并实现了多种内置的日志提供器,例如 Console ...

  6. [译]ASP.NET Core中使用MediatR实现命令和中介者模式

    作者:依乐祝 原文地址:https://www.cnblogs.com/yilezhu/p/9866068.html 在本文中,我将解释命令模式,以及如何利用基于命令模式的第三方库来实现它们,以及如何 ...

  7. ASP.NET Core 中的SEO优化(3):自定义路由匹配和生成

    前言 前两篇文章主要总结了CMS系统两个技术点在ASP.NET Core中的应用: <ASP.NET Core 中的SEO优化(1):中间件实现服务端静态化缓存> <ASP.NET ...

  8. 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,这种形 ...

  9. Asp.Net Core 中IdentityServer4 授权中心之应用实战

    一.前言 查阅了大多数相关资料,查阅到的IdentityServer4 的相关文章大多是比较简单并且多是翻译官网的文档编写的,我这里在 Asp.Net Core 中IdentityServer4 的应 ...

  10. Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

    一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...

随机推荐

  1. (NLP)关键词提取之——TF-IDF解析

    关键词提取--TF-IDF 1 TF-IDF定义 概要 tf-idf(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技 ...

  2. MCP SSE交互完整过程

    有关MCP的介绍文章很多,本文不细说,做一个时序图将完整过程说清楚.MCP协议主要通过两种技术实现:标准输入输出(stdio)和服务器发送事件(SSE),stdio(标准输入输出)是MCP协议在本地或 ...

  3. Faray 数列问题

    首先,Farey 数列 \(F_n\) 表示分母不超过 \(n\) 的所有既约真分数按大小顺序排列的集合,形式化来说 \[F_n = \left\{\frac{p}{q} \bigg\vert 0 & ...

  4. 如何优雅的关闭channel?

    一.channel使用存在的不方便地方 1.在不改变channel自身状态的情况下,无法获知一个channnel是否关闭. 2.关闭一个已经关闭的channel,会导致panic.因此,如果关闭cha ...

  5. 数栈大数据组件:Hive优化之配置参数的优化

    Hive是大数据领域常用的组件之一,主要用于大数据离线数仓的运算,关于Hive的性能调优在日常工作和面试中是经常涉及的一个点,因此掌握一些Hive调优是必不可少的一项技能.影响Hive效率的主要因素有 ...

  6. 袋鼠云数栈DTinsight与10家信创厂家完成产品兼容互认证,携手共建信创生态圈

    信创产业是国家数据安全.网络安全的基础,也是"新基建"的重要内容,它将成为拉动经济发展的重要抓手之一.随着国际竞争形势发生新的变化,力争掌握核心科技的"自主可控" ...

  7. 读书笔记《Linux内核完全注释》第二章硬件部分

    能源及电源,有了电能就可以控制电子管的通与不通,从而实现与.或.非.异或.位移.脉冲.传输.存储等基础功能.   1:CPU通过系统总线(3合1的通信总线)与其他外设相接. 大多数控制器.控制卡都集成 ...

  8. Blazor学习之旅 (14) Blazor WebAssembly

    在上一篇我们学习了如何创建和使用Razor类库,这一篇我们了解下WebAssembly是什么,以及创建第一个Blazor WebAssembly应用. 什么是WebAssembly? WebAssem ...

  9. 设置div 内容不会换行 显示滚动条

    overflow-x: scroll; display: inline-block; white-space: nowrap; 内容不能脱离文档流否则还是会把div 撑开

  10. C# 字符串 MD5 转Base64 (PHP 的编码一样)

    https://www.cnblogs.com/xiaochu/p/4402195.html MD5加密字符串并转化为base64(C#和PHP代码相同实现) -------PHP------代码-- ...