一、在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. 小程序简单 tab 切换实现

    也是终于找到了数据可视化的最佳载体, 用小程序来做可视化简直完美. 尤其对于像我这种搞数据的, 数据分析, 数据报表, 可视化一直是一个巨大难题, 当我认识的最终的方案还是要用前端的时候, 感觉还有麻 ...

  2. AI 狂飙时代,开源项目的新机遇?

    我每天都会刷 GitHub 热榜,围观全球开发者们都在捣鼓啥新鲜的玩意儿.我真切地感受到 AI 的浪潮汹涌而至,它正以一种摧枯拉朽(这个词可能有点猛,但感觉就是这么快!)的速度,改变着软件开发行业,同 ...

  3. 【Java持久层技术演进全解析】从JDBC到MyBatis再到MyBatis-Plus

    从JDBC到MyBatis再到MyBatis-Plus:Java持久层技术演进全解析 引言 在Java企业级应用开发中,数据持久化是核心需求之一.本文将系统性地介绍Java持久层技术的演进过程,从最基 ...

  4. 创建Spring Boot项目时,提示 Cannot download 'https://start.spring.io'

    问题提出 在使用IDEA创建Spring Boot项目时,提示无法连接https://start.spring.io,内容如下: Cannot download 'https://start.spri ...

  5. 玩转集群配置中心,一文带你了解 Taier 控制台

    ​ 原文地址:玩转集群配置中心,一文带你了解Taier控制台丨DTMO 03期直播回顾(内含视频+课件) 课程视频回顾:Taier基础教程(二):Taier1.1新功能详解&控制台介绍_哔哩哔 ...

  6. LiteLLM - 统一接口调用100+ LLM模型

    :bullet_train: LiteLLM LiteLLM 是一个统一的接口层,支持调用100+种大语言模型(LLM),包括Bedrock.Huggingface.VertexAI.Together ...

  7. Cursor 网页版来了,这下拉屎时也能工作了

    大家好,我是程序员鱼皮.几天前,Cursor 官方宣布推出了网页版 AI 代理,手机上也能用,可以让 AI 帮忙回答问题.编写代码.好家伙,这下我们程序员真的可以随时随地工作了??? 虽然网上吹得天花 ...

  8. typescript结构化类型应用两例

    介绍 结构化类型是typescript类型系统的一个重要特性,如果不了解这个特性,则经常会被typescript的行为搞得一头雾水,导致我们期待的行为与实际的行为不一致.今天我们就来看两个例子. 不了 ...

  9. C# 使用Newtonsoft.Json

    https://blog.csdn.net/qq_38762313/article/details/100161149 对象转json字符串 string jsStr=Newtonsoft.Json. ...

  10. 使用three.js,实现微信3D小游戏系列教程,框架篇(一)

    引言 在三维图形和游戏开发领域,three.js 作为一个基于 WebGL 的 JavaScript 库,提供了强大的功能来创建和显示动画化的 3D 计算机图形.它使得开发者能够轻松地在网页上构建复杂 ...