【c#】了解开发Web API的基本方法

这篇具有很好参考价值的文章主要介绍了【c#】了解开发Web API的基本方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Web API项目创建入门 

 1.1 Web API 项目的创建

​编辑

1.2 Post、Put等操作方法

二、Restful

 2.1 什么是REST?

2.2  Restful 的优缺点

三、Web API简单实例

3.1 开发Web API

       


一、Web API项目创建入门 

        浏览器和服务器之间传递的主要是HTML,而手机App等客户端和服务端之间传递的是JSON等结构化的数据。我们把提供结构化数据服务的接口叫做Web API

 1.1 Web API 项目的创建

c# web api,.net core,c#,.net,asp.net,.netcore

 创建成功后:c# web api,.net core,c#,.net,asp.net,.netcore

项目中生成的样本代码 WeatherForecastController.cs是一个控制类,基本结构如下:

//这个路由控制规则设置对 /WeatherForecast路径请求由WeatherForecastController来处理。

[ApiController] //Web API控制类添加的Attribute
//设置路由规则
[Route("[controller]")] // [controller]代表控制器名字,也就是WeatherForecast
public class WeatherForecastController : ControllerBase
{
    [HttpGet] //作为操作方法的入口,因此下面方法名是什么都不影响程序
    public IEnumerable<WeatherForecast> Get() //处理 /WeatherForecast的请求
    {
        //代码块
    }
}

         总结:控制器类上添加的[Route("[controller]")]以及Get方法上添加的[HttpGet]决定了当客户端向   /WeatherForecast这个路径发送GET请求的时候,又Get方法进行处理。Get方法返回的对象会被自动进行的JSON序列返回给客户端。

项目启动后显示界面:c# web api,.net core,c#,.net,asp.net,.netcore

         这个界面是我们创建项目的时候勾选的【启用OpenAPI支持】所启用的Swagger页面,这个界面会根据项目中的接口定义生成一个接口定义浏览的界面。

1.2 Post、Put等操作方法

        Web API会根据HTTP请求的谓词来匹配操作方法,因此我们可以为控制器类增加一个[httpPost]和[HttpPut]等处理POST和PUT请求。

例 在WeatherForecastController中增加一个SaveNote方法:c# web api,.net core,c#,.net,asp.net,.netcore

        运行后发现在Swagger页面中多出了一个Post请求选项。点击【POST】,再点击右上角的【Try it out】按钮,出现了默认JSON格式的请求报文模板:

c# web api,.net core,c#,.net,asp.net,.netcore

二、Restful

 2.1 什么是REST?

Web API开发有两种风格:

        1.面向过程的 (简称RPC)

        2.面向REST的(简称REST)

        在RPC风格的Web API中,通过“控制器/操作方法”的形式把服务器端的代码当做方法去调用。把HTTP当成传输数据的通道,不关心HTTP谓词。通过QueryString(查询字符串)、请求报文体给服务器传递数据或者状态码::

  1.  当需要加载所有用户的时候,我们就向/Persons/GetAll这个路径发送GET请求.
  2.  当需要加载id=8的用户的时候就向/Persons/GetById?id=8这个路径发送GET请求.
  3.  当需要更新id=8的用户的时候就向/Persons/Update这个路径发送POST请求

那什么是REST:按照HTTP的语义来使用HTTP协议

  1. 使用URL进行资源定位。获取id=8:/user/8;获取id=8的用户的订单列表:/user/8/orders.
  2. HTTP谓词:GET(获取资源)、POST(新增资源)、PUT(整体更新,不存在则创建),DELETE(删除资源).
  3. DELETE、PUT、GET是幂等的,POST是不幂等的;

     何为幂等?

            幂等就是对于一个接口采用同样的参数请求一次和请求多次的结果是一致的,不会因为多次请求而产生副作用。(比如一个人发表评论的时候由于网卡又点击了一次发布,最终数据库只保存了一次的发布内容就是幂等)

  4.  GET的响应可以被缓存;
  5.  服务端通过状态码反映资源获取的结果:404(访问用户不存在),403(没有权限),201(新增用户请求成功);

 那么如何请求Restful风格的控制器呢?

/*
    1.当我们需要加载所有用户的时候就向/api/Persons这个路径发生GET请求,添加了
      [HttpGet]的GetPersons方法就会被调用
    2.当我们需要加载id=8的用户的时候,向/api/Person/8这个路径发送GET请求,添加
      了[HttpGet("{id}")]的方法就会被调用
    ......................
    ......................
*/


[Route("api/[controller]")]
        public class PersonController : ControllerBase
        {
            [HttpGet]
            public IEnumerable<Person> GetPerson();

            [HttpGet("{id}")]
            public Person GetPerson(long id);

            [HttpPut("{id}")]
            public void UpdatePerson(long id,Person person)

            [HttpPost("{id}")]
            public void SavePerson(Person person);

            [HttpDelete("{id}")]
            public void DeletePerson(long id);

        }

2.2  Restful 的优缺点

优点:

  • 通过URL进行定位,避免使用QueryString,报文体定位,语义更清晰
  • 通过HTTP谓词表示不同的操作,接口统一且具有自描述性
  • 可以对GET、PUT、DELETE等幂等操作失败后进行重试
  • 可以对GET请求进行缓存,提升系统的访问速度,降低服务器压力
  • 通过HTTP状态码反映服务端的处理结果,能够统一错误码
  • 网管系统可以根据状态码来分析系统的访问数据

缺点: 

  • 真实系统中的资源非常复杂,很难清晰的进行资源划分
  • 不是所有的操作都能够简单的对应到确定的HTTP谓词中
  • 系统进化可能改变幂等性
  • HTTP状态码个数有限,无法满足
  • 有些客户端可能不支持PUT、DELETE请求

三、Web API简单实例

3.1 开发Web API

(1)创建一个控制器类:

    [Route("api/[controller]/[action]")]
    [ApiController]
    public class LoginController : ControllerBase
    {
        [HttpPost]
        public ActionResult<LoginResult> Login(LoginRequest loginReq)
        {
            if(loginReq.UserName=="admin" && loginReq.Password=="123456") 
            {
                var processes = Process.GetProcesses().Select(p => new ProcessInfo(
                    p.Id,p.ProcessName,p.WorkingSet)).ToArray();
                return new LoginResult(true, processes);
            }
            else
            {
                return new LoginResult(false, null);
            }
        }
    }
    //请求的参数信息
    public record LoginRequest(string UserName,string Password);
    //进程信息,分别表示:       进程ID     进程名        进程分配的物理内存量
    public record ProcessInfo (int Id,string ProcessName, long WorkingSet);
    //请求信息是否正确
    public record LoginResult(bool IsOK, ProcessInfo[] Processes);

在Swagger页面测试Login方法:

        当我们通过请求报文体设置错误的用户信息时:

c# web api,.net core,c#,.net,asp.net,.netcore

        当设置正确的信息时:

c# web api,.net core,c#,.net,asp.net,.netcore文章来源地址https://www.toymoban.com/news/detail-776724.html

       

到了这里,关于【c#】了解开发Web API的基本方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ASP.NET Core 中的两种 Web API

    ASP.NET Core 有两种创建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基类定义接口endpoints。 基于 Minimal APIs,使用Lambda表达式定义接口 endpoints。 基于 Controller 的 Web API 可以使用构造函数注入,或者属性注入,遵循面向对象模式。 基于 Minimal APIs 的 Web API 通

    2024年02月09日
    浏览(45)
  • .net core 6.0 web api 爬坑日记

    本人以前做前端开发的,就是 html , js , css , vue , react 那些 此前没接触过 .net 甚至没接触过 C# , 若哪里不对或有缺陷欢迎指出,以便改正! ^_^ 这是当前所在公司的一个小项目 , 虽然这个项目不大, 但是奈何我又喜欢新版本,所以直接用的 .net core 6.0 而且多数问题百度, 谷歌 都只有

    2024年02月04日
    浏览(56)
  • 课程32:.Net Core Web API部署IIS

    2024年02月04日
    浏览(35)
  • ASP.NET Core Web API之Token验证

    在实际开发中,我们经常需要对外提供接口以便客户获取数据,由于数据属于私密信息,并不能随意供其他人访问,所以就需要验证客户身份。那么如何才能验证客户的什么呢?今天以一个简单的小例子,简述ASP.NET Core Web API开发过程中,常用的一种JWT身份验证方式。仅供学

    2024年02月11日
    浏览(50)
  • ASP.NET Core Web API 流式返回,逐字显示

    Websocket、SSE(Server-Sent Events)和长轮询(Long Polling)都是用于网页和服务端通信的技术。 Websocket是一种全双工通信协议,能够实现客户端和服务端之间的实时通信。它基于TCP协议,并且允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据。 SSE是一种单向

    2023年04月23日
    浏览(54)
  • ASP.NET Core 中基于 Minimal APIs 的Web API

    Minimal APIs 是ASP.NET Core中快速构建 REST API 的方式,可以用最少的代码构建全功能的REST API。比如下面三行代码: 可以实现在请求网站根目录结点的时候,返回\\\"Hello World!\\\"。 这种方式的Web API可以用于构建微服务,极简功能的网站。 下面代码,将几个 HTTP 请求的 url映射到 Lambda

    2024年02月10日
    浏览(44)
  • ASP.NET Core Web API入门之三:使用EF Core

    一般来讲我们做项目都会用实体类跟数据库实体进行关系对应,这样的好处方便我们维护、增删改查,并且可以减少SQL的编写,从而统一风格,那么 Entity Framework Core 就是很不错的ORM框架。 1、跨数据库支持能力强大,只需修改配置就可以轻松实现数据库切换。 2、提升了开发效

    2024年02月10日
    浏览(55)
  • ASP.NET Core 中基于 Controller 的 Web API

    客户端发送Http请求,Contoller响应请求,并从数据库读取数据,序列化数据,然后通过 Http Response返回序列化的数据。 Web API 的所有controllers 一般继承于 ControllerBase 类,而不是Controller 类。 因为 Controller 类也继承自ControllerBase 类,但是支持views,而API一般不需要这个功能。 Co

    2024年02月10日
    浏览(71)
  • 2.1 .net 8 ASP.NET Core Web API - Controller详解

    书接上回,上节我们留了几个问题,即: 1、接口Hello的名字究竟怎么来的? 2、我们如果想把接口改成其他的名称,应该怎么做? 3、我们继承ControllerBase,以及[Route(“[controller]”)]属性,又是分别起到什么作用? 需要解决以上几个问题,我们就要继续深入研究Controller相关的

    2024年02月20日
    浏览(50)
  • 在 ASP.NET Core Web API 中处理 Patch 请求

    PUT 和 PATCH 方法用于更新现有资源。 它们之间的区别是,PUT 会替换整个资源,而 PATCH 仅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一种静态语言( dynamic 在此不表),当我们定义了一个类型用于接收 HTTP Patch 请求参数的时候,在 Action 中无法直接从实例中得知客户端提供了哪

    2024年02月04日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包