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 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...
随机推荐
- 小程序简单 tab 切换实现
也是终于找到了数据可视化的最佳载体, 用小程序来做可视化简直完美. 尤其对于像我这种搞数据的, 数据分析, 数据报表, 可视化一直是一个巨大难题, 当我认识的最终的方案还是要用前端的时候, 感觉还有麻 ...
- AI 狂飙时代,开源项目的新机遇?
我每天都会刷 GitHub 热榜,围观全球开发者们都在捣鼓啥新鲜的玩意儿.我真切地感受到 AI 的浪潮汹涌而至,它正以一种摧枯拉朽(这个词可能有点猛,但感觉就是这么快!)的速度,改变着软件开发行业,同 ...
- 【Java持久层技术演进全解析】从JDBC到MyBatis再到MyBatis-Plus
从JDBC到MyBatis再到MyBatis-Plus:Java持久层技术演进全解析 引言 在Java企业级应用开发中,数据持久化是核心需求之一.本文将系统性地介绍Java持久层技术的演进过程,从最基 ...
- 创建Spring Boot项目时,提示 Cannot download 'https://start.spring.io'
问题提出 在使用IDEA创建Spring Boot项目时,提示无法连接https://start.spring.io,内容如下: Cannot download 'https://start.spri ...
- 玩转集群配置中心,一文带你了解 Taier 控制台
原文地址:玩转集群配置中心,一文带你了解Taier控制台丨DTMO 03期直播回顾(内含视频+课件) 课程视频回顾:Taier基础教程(二):Taier1.1新功能详解&控制台介绍_哔哩哔 ...
- LiteLLM - 统一接口调用100+ LLM模型
:bullet_train: LiteLLM LiteLLM 是一个统一的接口层,支持调用100+种大语言模型(LLM),包括Bedrock.Huggingface.VertexAI.Together ...
- Cursor 网页版来了,这下拉屎时也能工作了
大家好,我是程序员鱼皮.几天前,Cursor 官方宣布推出了网页版 AI 代理,手机上也能用,可以让 AI 帮忙回答问题.编写代码.好家伙,这下我们程序员真的可以随时随地工作了??? 虽然网上吹得天花 ...
- typescript结构化类型应用两例
介绍 结构化类型是typescript类型系统的一个重要特性,如果不了解这个特性,则经常会被typescript的行为搞得一头雾水,导致我们期待的行为与实际的行为不一致.今天我们就来看两个例子. 不了 ...
- C# 使用Newtonsoft.Json
https://blog.csdn.net/qq_38762313/article/details/100161149 对象转json字符串 string jsStr=Newtonsoft.Json. ...
- 使用three.js,实现微信3D小游戏系列教程,框架篇(一)
引言 在三维图形和游戏开发领域,three.js 作为一个基于 WebGL 的 JavaScript 库,提供了强大的功能来创建和显示动画化的 3D 计算机图形.它使得开发者能够轻松地在网页上构建复杂 ...