WebAPI(一)

news/2024/9/28 4:55:12

WebAPI

实行Restful路由风格

API数据处理

WebApi.net6.0学习

路由规则和路由传参

Route的api/[controller]/[action]路由匹配

如果需要区分路由,可以在路由获取方式上添加相应的字段


路由传参的几种方式

​ 1. 定义接收端口,但是值可传可不传


​ 2.必须传值(必传项),并且定义的参数必须一一对应


否者会出现伪静态路由,不过应该不算报错

多参数传参,并且是必传项

ApiControllerAttribute

  1. 标记控制器:任何需要成为 Web API 控制器的类都应该用 ApiControllerAttribute 进行标记。例如:

    [ApiController]
    public class ProductsController : ControllerBase
    {// 动作方法public IEnumerable<Product> Get(){// ...}
    }
    
  2. 配置特性ApiControllerAttribute 提供了一些配置选项,允许你定义控制器的特定行为,如格式化设置、HTTP状态码处理等。

  3. 自动模型验证:当控制器用 ApiControllerAttribute 标记后,Web API 会自动执行传入请求的模型验证。如果模型验证失败,它将自动返回一个 HTTP 400(错误请求)响应。

  4. 属性路由:在 ASP.NET Web API 2 中,ApiControllerAttribute 支持属性路由(attribute routing),这是一种更灵活的路由方式,允许你直接在控制器和动作上定义路由。

  5. 继承ApiControllerAttribute 继承自 ControllerBase,这意味着任何继承自 ControllerBase 的特性或方法也适用于标记了 ApiControllerAttribute 的控制器。

  6. 非阻塞性:从 ASP.NET Core 开始,ApiControllerAttribute 确保控制器动作是非阻塞的,这意味着它们不应该直接同步等待 I/O 操作完成。

  7. 响应类型:通常,控制器动作返回 IActionResult 或其派生类型,这允许 Web API 框架将动作的结果封装为适当的 HTTP 响应。

  8. API行为约定ApiControllerAttribute 还包含了一些 Web API 的行为约定,比如对 HTTP 405(方法不允许)和 HTTP 406(不接受)的自动处理。


跨域

三步走

builder.Sercices.AddCors(c=>c.AddPolicy("any",p=>p.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()));app.UseCors();

在控制器类上面添加

[EnableCors("any")]

.net6.0

新语法

在using前面加上global关键字,可以使变为全局变量。

如果在csproj中启用了

enable

编译器会自动隐式增加对于System,System.Linq等常用命名空间的引入,不同个类型项目引入的命名空间也不一样。

csproj中

<Nullable>enable</NUllable>启用可空引用类型检查

在引用类型后添加“ ?”修饰符来声明这个类型是可空的。对于没有添加"?"修饰符的引用类型的变量,如果编译器发现存在为这个变量赋值null的可能性的时候,编译器会给出警告信息。

record类型

C#中的==运算符默认是判断两个变量指向的 是否是同一个对象,即使两个对象内容完全一样,也不相等。可以通过重与Equals万法、重写 == 运算符等来解决这个。
问题,不过需要开发人员编写非常多的额外代码。
2、在C#9.0中增加了记录(record)类型的语法,编译器会为我们自动生成Equals、GetHashcode等方法。

record的所有属性,只读不可写

internal record Student (int Id, string Name)
{public string NickName { get; set;}
} 
  • 可以实现部分属性是只读的、而部分属性是可以读

    写。

  • 默认生成的构造方法的行为不能修改,我们可以为

    类型提供多个构造方法,然后其他构造方法通过this调

    用默认的构造方法。

  • 也推荐使用只读属性的类型。这样的所有属性都为

    只读的类型叫做“不可变类型”,可以让程序逻辑简单,

    减少并发访问、状态管理等的麻烦。

    internal record Student (int Id, string Name)
    {public string? NickName { get; set; }public Student (int Id, string Name, string nickName): this (Id, Name){this. NickName = nickName;}
    }Student s1=new Student(1,"yzk");
    Student s2=new Student(1,"yzk","xiaokeke");

ASP.NET CORE

REST

按照HTTP的语义来使用HTTP的协议

统一资源定位符(URL,英语Uniform Resource Locator的缩写)

编程规范

对于保存、更新类的请求POST、PUT请求,把全部参数都放到请求报
文体中;
对于DELETE请求,要传递的参数就是一个资源的id,因此把参数放到
QueryString中即可;
对于GET请求,一般参数的内容都不会太长,因此统一通过
QueryString传递参数就可以。对于极少数参数内容超过URL限制的请求,
由于GET、PUT请求都是幂等的,因此我们把请求改成通过PUT请求,然
后通过报文体来传递参数。
  1. 使用RPC风格:Users/AddNew、Users/GetAll、Users/DeleteByld。
  2. 对于可以缓存的操作,使用GET请求;对于幂等的更新操作,使用
    PUT请求;对于幂等的删除操作,使用DELETE请求;对于其他操作,统
    一使用POST请求。
  3. 参数:保存、更新类的请求使用POST、PUT请求,把全部参数都放到
    请求报文体中;对于GET和DELETE请求,把参数放到QueryString中。推荐尽量使用URL做资源定位。
  4. 对于业务错误,服务器端返回合适的4XX状态码,不知道该选择哪个
    状态码就用400;同时,在报文体中通过code参数提供业务错误码以及错误消息。
  5. 如果请求的处理执行成功,服务器端返回值为200的Http状态码,如
    果有需要返回给客户端的数据,则服务器端把这些数据放到响应报文体中。

​ 如果控制器中存在一个没有添加[HttpGet]、[HttpPost]等的public 方法,Swagger就会报错,可以用
​ [ApiExplorerSettings(IgnoreApi = true)]

控制器及返回值

[HttpGet("students/school/{schoolName}/class/{classNo}")]
public Person GetStudents (string schoolName, [FromRoute (Name="classNo") ]int classNum)
{return new Person { Id=classNum+6, Name=schoolName+"T"};
}

1、Action方法既可以同步也可以异步。

2、Web API中Action方法的返回值如果是普通数据类型,那么返回值就 会默认被序列化为Json格式。
3、Web API中的Action方法的返回值同样支持IActionResult类型,不包 含类型信息,因此Swagger等无法推断出类型,所以推荐用 ActionResult,它支持类型转换,从而用起来更简单。

public ActionResult<Person> GetPerson(int id)
{if (id <= 0)return BadRequest("id必须是正数");else if (id == 1)return new Person(1,"杨中科”,18);else if (id == 2)return new Person(2, "Zack", 8);elsereturn NotFound(“人员不存在”);//自定义消息也重要	
}
  • 使用[FromQuery]来获取QueryString中的值。如果名字一致,只要为参数添加[FromQuery]即可;而如果名字不一致,
    [FromQuery(Name=名字)]。
  • QueryString和Route可以混用。

请求

WebAPI的开发模式下,Json格式的请求体是主流。

该显示拿取就从显示拿,该从结构体拿数据及从结构体拿。

如下:

[HttpPut ("{id}")]public string UpdatePerson1 ([FromRoute]int id, Person p1)
{return"更新”+id+"成功"+p1.Name;
}

一定要设定请求头中的Content-Type为application/json,而且数据必须是合法的json格式。

WebAPI中很少用到的方式:

  • 从Content-Type为Multipart/form-data的请求中获取数据的[FromForm]
  • 从请求报文头中获取值的[FromHeader]

前后端分离开发

前端VUE3
Vue搭建步骤:

  • 1)安装Node.js
  • 2)设定国内镜像 npm config set registry
  • https://registry.npm.taobao.org
  • 3)安装yarn: npm install-g yarn
  • 4)创建Vue项目:yarn create@vitejs/app 项目名字
  • 更喜欢用vue-cli 的方式创建项目
  • 2024-4 Vue不支持这个写法了,官网是yarn create vite……
  • 5)按照提示运行项目。
1、在src文件夹下创建views文件夹。
2、安装ajax库axios,项目根目录:yarn add axios
3、在views文件夹下创建Login.vue文件
<input type="text" v-model="state.loginData.userName" />
<input type="submit"value="登录"
@click="loginSubmit"/>
<tr v-for="p in state.processes" :key="p.id">
<td>{{(p.workingSet64/1024)}}K</td>
</tr>

配置跨域

builder. Services. AddCors (opt => {opt. AddDefaultPolicy(b => {b. WithOrigins(new string[] { "http://localhost:3000/" }). A11owAnyMethod (). A11owAnyHeader (). A11owCredentials();});
}):

当触发请求时才进行注入的方法

[HttpGet]
public int Test1([FromServices]TestService textService,int x)
{return textService.Count+x;
}

开发模块化的服务注册框架

在复杂项目中,一个系统不只有一个项目,要分为多个项目进行分层开发。

如果每个项目都需要自己注册自己的服务。

autoFAC

缓存

普通缓存比较鸡肋

客户端响应缓存

在控制器相应的Action上添加

[RespomseCache(Duration=20)]//意为指示浏览器可以缓存20秒

服务器端响应缓存

用法:

在app.MapControllers()之前加上app.UseResponseCaching();
同时要确保app.UseCors()写道app.UseResponseCaching()之前
但是如果浏览器不支持缓存,那么服务器端即使设置也不会使用缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/47157.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

python学习2

所花时间(包括上课): 2h代码量(行): 150左右搏客量(篇): 1了解到的知识点:python备注(其他): 进行数据爬取的几个练习 1、简易网页采集器import requests if __name__ == __main__:#UA检测#UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器headers = {User…

成功是一种一致而反复的行动的结果。 12个小习惯,改变你的生活:

1. 实行感恩日记 每天反思一下你每天感恩的事物。这将增加幸福感,减轻压力,改善心理健康。 2. 每天早上喝一杯水 每天早上喝一杯水。这将唤醒你的新陈代谢,为你的一天提供水分。 3. 每天锻炼20分钟 每天进行20分钟的锻炼。你的锻炼不必是一次极端的训练,它可以是一次简单的…

CAD的图纸可以转成Word文档吗?

cad作为一款常用的设计与绘图软件,同时Word作为目前最常用的办公软件之一,有的时候需要把cad简图或者图放到Word文档中。那么,你知道cad转Word怎么转吗?接下来,小编就简单的介绍一下怎么把cad图转换成Word。 方法一:cad软件 1.首先我们打开cad文件,点击下方的布局,进入…

就业市场挑战重重,求职者如何进入Salesforce生态系统?

目前,就业市场充满挑战,轻松进入Salesforce生态系统的日子已经一去不复返了。尽管入门级角色仍然存在,但市场上的申请者数量已超过其需求。成千上万的求职者争夺有限的职位,因此从人群中脱颖而出需要制定战略方法,求职者对Salesforce知识需要有深刻的了解。在入门级Salesf…

R语言实现偏最小二乘回归法 partial least squares (PLS)回归

原文链接:http://tecdat.cn/?p=8652 原文出处:拓端数据部落公众号偏最小二乘回归是一种回归形式 。 当使用pls时,新的线性组合有助于解释模型中的自变量和因变量。 在本文中,我们将使用pls预测“收入” 。 rlibrary(Ecdat) ## data.frame: 753 obs. of 18 variabl…

c#

枚举类型对数据库的操作添加数据添加完清空(textbox.Text="";)更新结构体 (定义)数组声明结构体

GIS Server for Linux 挂载 Windows CIFS 共享文件夹

需保证,所发布的数据,文件名、路径,不带中文windows 配置共享文件夹 略 Linux 安装 cifs-utils rpm -ivh cifs-utils-6.2-10.el7.src.rpmLinux 创建挂载点并挂载 mkdir /mnt/testfolder chmod 770 /mnt/testfoldermount.cifs //192.168.1.34/sjzx /mnt/testfolder -o userna…

MBR60200PT-ASEMI逆变箱专用MBR60200PT

MBR60200PT-ASEMI逆变箱专用MBR60200PT编辑:ll MBR60200PT-ASEMI逆变箱专用MBR60200PT 型号:MBR60200PT 品牌:ASEMI 封装:TO-247 最大平均正向电流(IF):60A 最大循环峰值反向电压(VRRM):200V 最大正向电压(VF):0.85V~0.90V 工作温度:-40C~175C 反向恢复时间:5ns…