ASP.NET Core 开发 Web API

2. Web Api 的创建与Http类型的介绍

2.1 ASP.Net Core Web API项目的创建

1.创建ASP.NET Core Web API项目
从“文件”菜单中选择“新建”“项目”。
在搜索框中输入“Web API”。
选择“ASP.NET Core Web API”模板,然后选择“下一步”。
在“配置新项目”对话框中,将项目命名为“TodoApi”,然后选择“下一步”。
在“其他信息”对话框中:
确认“框架”为“.NET 6.0 (长期支持)”。
确认已选中“使用控制器(取消选中以使用最小 API)”。
选择“创建”。
 

~~~~~~~~~

1. Web Api 程序包引用
Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技术。

EF Core 可用作对象关系映射程序 (O/RM),这可以实现以下两点:

使 .NET 开发人员能够使用 .NET 对象处理数据库。
无需再像通常那样编写大部分数据访问代码。


准备工作:

1.创建项目:打开Visual Studio2022,选择ASP.NET Core Web应用空项目基于.Net6 创建
2.安装Nuet程序包——项目——依赖项——管理NuGet程序包(版本等级尽量一样)

Microsoft.EntityFrameworkCore.SqlServer (适用于EF Core SQL Server 提供程序)
Microsoft.EntityFrameworkCore.Design(适用于EF Core .NET Core CLI 工具 )
Microsoft.EntityFrameworkCore.Tools(适用于 EF Core 的包管理器控制台工具)

Microsoft.EntityFrameworkCore.Design
 

2. 导入项目所需 NuGet 包

2.1 添加 NuGet 包

2.2搜索安装所需的 NuGet 包

Microsoft.EntityFrameworkCore.SqlServer (适用于EF Core SQL Server 提供程序)
Microsoft.EntityFrameworkCore.Design(适用于EF Core .NET Core CLI 工具 )
Microsoft.EntityFrameworkCore.Tools(适用于 EF Core 的包管理器控制台工具)

Microsoft.EntityFrameworkCore

此项本次未安装

2. Web Api 的创建与Http类型的介绍

2.1 ASP.Net Core Web API项目的创建

1.通过vs建立一个ASP.Net Core Web API项目;(如果没有在搜索模板中找到它,就将模板栏滑动到最后,点击蓝色字体安装多个工具和功能),然后选中如图2所示2,再安装。

2 .2  API接口的创建

生成项目后,解决方案会自动生成 Controllers 文件夹,里面存放的就是接口;

创建:

需要注意得是:命名方法一般为 名字+后缀 Controller;(不影响接口的名字,还是前部分样式) 最大字体为接口名称

创建方式:

1.创建 API控制器

        点击文件夹右键添加 控制器 选则 通用API Api控制器,之后生成如下二代码,此时的接口还是不能用的;

2.需要声明接口 [ApiController]  和一级接口路径[Route("Test")]

        (声明接口是必须的,声明接口路径最好还是带上--可以起个和接口名一样的路径好用);

3.正式定义接口和接口类型;

        在这里直介绍[HttpGet("getUsers")]和[HttpPost("getUsers")]两种接口类型 格式:接口类型+方法

注意:接口类型()中填写的是二级路径(自定义),效果如上白蓝色图 蓝色GET 是类型,Test一级路径 getUser就是二级路径即接口类型中的路径  ;

完整代码:
 

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;namespace WebApplication1.Controllers
{[ApiController] //声明是一个API接口[Route("Test")] //路由:api接口的路径public class TestController : Controller{/// <summary>/// 获取所有人员数据/// </summary>/// <returns></returns>[HttpGet("getUsers")]public List<User> GetUsers(){List<User> list = UserManager.CreateUsers();return list;}}
}

2.3 HttpGet和HttpPost类型的区别

1.传入参数不同

HttpGet:传入个体基本类型 如:(int,string 可传多个);

HttpPost:传入的是主题参数,当然也可以传入个体参数;

        [HttpGet("getUserById")]public User GetUserById(int id){return UserManager.GetUserById(id);}//User 是一个内容[HttpPost("add")]public User Add(User user){//List<User> users = new List<User>();return UserManager.Add(user);}

2.HttpGet接口执行后 返回的 Request URL路径可以在通过浏览器打开,如下图:

执行的就是get 网址,和执行效果图 图一相对应

5.构建控制器进行测试
1.创建控制器

右键单击 Controllers 文件夹。

选择“添加”“新建构建项”。

选择“其操作使用实体框架的 API 控制器”,然后选择“添加” 。

在“添加其操作使用实体框架的 API 控制器”对话框中:

在“模型类”中选择“TodoItem (TodoApi.)”。
在“数据上下文类”中选择“TodoContext (TodoApi.)”。
选择“添加”。

二.ASP.NET Core 开发 Web API

控制器类WeatherForecastController.cs 继承自ControllerBase类。我们注意到ASP.NET Core MVC项目中的控制器类继承自Controller类,Controller是ControllerBase类的子类。Controller类中包含View等和MVC中的视图等相关的代码,因此我们在编写Web API 的时候,控制器类一般不需要继承自Controller。
 

在WeatherForecastController.cs类中加入[Route("[controller]/[action])"]表示访问的路径

在方法中前边加入[HttpGet]或者[HttpPost]等等表示可以处理Get或者Post请求了,在WeatherForecastController新增加了一个方法SaveNote方法这个方法把用户提交的内存保存到文本文件中,(方法的返回值为保存的文件名)

对于Web API参数的传递建议如下:

对于保存、更新类的请求一般都是使用POST、PUT请求,把全部参数都放到请求报文体中;
对于DELETE请求,要传递的参数就是一个资源的ID,因此把参数放到QueryString中即可;
对于GET请求,一般参数的内容都不会太长,因此统一通过QueryString传递参数就可以;
当然对于极少数参数内容超过URL限制的请求,由于GET、PUT请求都是幂等的,因此把请求改成通过PUT请求,然后通过报文体来传递参数
 
 

四. Core WebApi 接收前端传过来的数据
  Content-Type:application/json的数据:前端对json数据进行JSON.stringify()序列化,后台直接用对应的实体类或者list集合直接接收(或者用[FromBody] string value接收,接收后反序列化:一般不这么做)(post请求)

  Content-Type:text/plain 数据:[FromForm]实体类获取,或者直接[FromForm] 普通数据类型获取。(post请求)

  另外,如果是实体类接收前端参数,实体类前需要加[FromQuery]或者[FromHeader](get请求)

  注意:无论实体类方式接收还是普通数据类型参数接受数据,都必须保证前后端字段名一致(不讨论特殊情况)。
 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS自我救赎2之基本工程建立

System Core 1.System Core >SYS 2.System Core >RCC 3.System Core >NVIC Middleware Middleware >FREERTOS Clock configuration Project Manager 在编译生成的代码前需要找一个与芯片对应的启动文件&#xff0c;启动文件添加进来&#xff0c;编译就没问题了

git与github的交互(文件与文件夹的上传)

git与github的交互&#xff08;文件与文件夹的上传&#xff09; 准备&#xff1a;gitHub账号&#xff08;创建一个新项目&#xff09;与Git软件的安装 一&#xff1a;开启公钥SSH登录&#xff08;之前配置过就跳过&#xff09; 1.安装SSH 在本地新创建文件夹负责装载项目&a…

为SecureCRT配置密钥验证,实现免密登录远程Linux服务器

本实例以普通用户zhangsan远程连接Linux服务器为例。 一、生成密钥对 在Linux服务器上为普通用户zhangsan远程连接服务器制作密钥对&#xff0c;执行命令如下&#xff1a; [rootServer ~]# su - zhangsan #切换到zhangsan身份登录 [zhangsanServer ~]$ ssh-keygen #生成…

【LeetCode热题100】--230.二叉搜索树中第K小的元素

230.二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 二叉搜索树的中序遍历是有序的&#xff0c;所有先得到其有序序列&#xff0c;然后在取…

以太网基础学习(一)——以太网概述

一、以太网概述 以太网(Ethernet)指的是由 Xerox公司创建并由Xerox、Intel和 DEC公司联合开发的基带局域网规范&#xff0c;通用的以太网标准于1980年9月30日出台&#xff0c;是当今现有局域网采用的最通用的通信协议标准&#xff08;是局域网的一种&#xff09;。 以太网是一种…

【LeetCode】剑指 Offer Ⅱ 第6章:栈(6道题) -- Java Version

题库链接&#xff1a;https://leetcode.cn/problem-list/e8X3pBZi/ 类型题目解决方案栈的应用剑指 Offer II 036. 后缀表达式模拟 栈 ⭐剑指 Offer II 037. 小行星碰撞分类讨论 栈 ⭐单调栈剑指 Offer II 038. 每日温度单调栈 ⭐剑指 Offer II 039. 直方图最大矩形面积单调栈…

leetCode 1143.最长公共子序列 动态规划 + 滚动数组

1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串…

Java @Override 注解

在代码中&#xff0c;你可能会看到大量的 Override 注解。 这个注解简单来说就是让编译器去读的&#xff0c;能够避免你在写代码的时候犯一些低级的拼写错误。 Java Override 注解用来指定方法重写&#xff08;Override&#xff09;&#xff0c;只能修饰方法并且只能用于方法…

R可视乎|灯芯柱状图代码解读

简介 这篇推文代码来源于&#xff1a;TidyTuesday&#xff0c;主要想学习如何绘制灯芯柱状图&#xff08;名字小编瞎取的&#xff09;&#xff0c;最终结果如下&#xff1a; 注释&#xff1a;与普通柱状图相比&#xff0c;灯芯柱状图不仅可以展示随时间变化的总体趋势&#xf…

git的基础操作

https://blog.csdn.net/a18307096730/article/details/124586216?spm1001.2014.3001.5502 1&#xff1a;使用场景 SVN&#xff0c;如果服务器里面的东西坏掉了&#xff0c;那么就全线崩盘了。 1:基本配置 git config --global user.name “luka” (自己的名字就行) git co…

基于共生生物优化的BP神经网络(分类应用) - 附代码

基于共生生物优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于共生生物优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.共生生物优化BP神经网络3.1 BP神经网络参数设置3.2 共生生物算法应用 4.测试结果…

爬虫:网站三次请求获取频道内容

一、抓包 url aHR0cDovL3d3dy55amZ3LmNuLw从下图中可以看出&#xff0c;打开网页请求了三次&#xff0c;前两次在response中并不返回网页内容。 二、代码模仿第一次请求返回 <html><head><meta http-equiv"Content-Type" content"text/html; …