【.Net动态Web API】背景与实现原理

这篇具有很好参考价值的文章主要介绍了【.Net动态Web API】背景与实现原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🚀前言
本文是《.Net Core进阶编程课程》教程专栏的导航站(点击链接,跳转到专栏主页,欢迎订阅,持续更新…)

专栏介绍:通过源码实例来讲解Asp.Net Core进阶知识点,让大家完全掌握每一个知识点。

专栏适用于人群:Web后端开发人员
————————————————

本课程内容:

1、动态Web API背景

2、动态Web API实现原理

3、识别自定义控制器

一、动态Web API背景

一说到动态Web API,很多人都是因为使用ABP框架了解的。在讲解如何实现之前,我们了解下动态Web API的好处!

在DDD框架中,领域层和应用层是核心、所有业务处理与逻辑全部放在这两个层,而API层是只是薄薄的一层。

比如:DDD教程里的API代码,都是只有2行代码。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

这样就存在2个问题:

1、每一个对外提供的API接口,我们都需要编写,这些都很机械化的代码。

2、EletricAuthorize权限验证,其实是属于应用层的,但这边被放在API层。

而通过动态Web API,可以减少代码量、提升工作效率等诸多好处。

二、动态Web API实现原理

2.1 应用程序部件

我们之所以可以实现动态Web API,要归功于Asp.net Core为我们提供的:应用程序部件。

在Asp.Net Core架构里,MVC控制器、视图组件、Razor Pages、Razor 视图、标记帮助程序(Tag Helpers)等都是一个独立的功能组件,它允许我们通过发现并加载应用程序中的特定功能组件。

比如:Web API只需加载MVC控制器、MVC架构的程序需要加载MVC控制器、视图组件。

比如官方文档里示例里,就是通过加载外部的DLL库,来加载控制器。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

官方文档地址:https://learn.microsoft.com/zh-cn/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-8.0

2.2 独立控制器项目示例

下面用一个示例来演示下,如何使用。

2.2.1 新建Web API项目

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

项目名称:Electric.DynamicWebAPI

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

为了后续方便调试:勾选启用OpenAPI,框架版本:这里选择.Net 7.0(这里可以根据需求自行选择)。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

添加后的目录:

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

2.2.2 新建控制器项目

选择类库项目

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

项目名称:Electric.Controller

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

框架:.Net 7.0

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

添加后的目录:

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

2.2.3 新增控制器

在项目Electric.Controller,新增控制器:TestController。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

TestController代码:

using Microsoft.AspNetCore.Mvc;

namespace Electric.Controller
{
    [ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    {
        [HttpGet]
        public string GetName()
        {
            return "GetName";
        }
    }
}
2.2.4 编译项目Electric.Controller

编译后把dll拷贝至 Electric.DynamicWebAPI项目bin目录下。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

2.2.5 Electric.DynamicWebAPI加载控制器

在Program.cs加载程序集dll。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

当然了,如果Electric.DynamicWebAPI如果引用了项目TestController,Asp.Net Core框架会默认扫描所有控制器,就不需要添加上面的代码。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

//加载控制器

var assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Electric.Controller.dll");

builder.Services.AddControllers().AddApplicationPart(assembly);

2.2.6 运行项目

运行项目后,我们就可以看到控制器:TestController,已经被加载了。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

2.3 ApplicationPartManager

通过官方文档和上面的演示,知道Asp.Net Core为我们提供了ApplicationPartManager,来方便我们根据需求来加载各种组件,比如控制器组件、视图组件等。

官方文档也告诉我们,通过AddApplicationPart和ConfigureApplicationPartManager,都可以实现加载组件。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

3、识别自定义控制器

3.1 问题

看完上面的例子,可能会有很多人会产生一个问题:你定义的控制器,是继承了ControllerBase,Asp.Net Core可以自动识别,但是我们在DDD框架中,编写的可是应用服务,不会去继承ControllerBase。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

3.2 检查应用程序部件

针对上面的问题,我们就需要用到:检查应用程序部件。

Asp.net Core也为我们提供了检查应用程序部件的方法,通过这些功能提供程序,我们就可以告诉

Asp.net Core哪一个是控制器。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

3.3 ApplicationPartManager 定义

我们通过ApplicationPartManager的源码定义看,我们就可以很清楚的知道。

我们要实现动态API,只需两个步骤:

1、为ApplicationParts加载程序集资源;

2、为FeatureProviders添加检查应用程序部件的方法,告诉Asp.net Core哪一个是控制器。

【.Net动态Web API】背景与实现原理,Asp.Net Core进阶教程,.net,c#,.netcore

四、最后

【.Net动态Web API】背景与实现原理就介绍到这边啦!

下一个课程讲解:如何实现动态控制器!

这个系列预计一天一篇文章,想要学习的可以关注起来!

文章会持续更新,大家有想要了解的功能点或者话题,可以在评论区告诉我!

【本课程源码下载链接】加我:xgbbwj文章来源地址https://www.toymoban.com/news/detail-855193.html

到了这里,关于【.Net动态Web API】背景与实现原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Web SSH 的原理与在 ASP.NET Core SignalR 中的实现

    有个项目,需要在前端有个管理终端可以 SSH 到主控机的终端,如果不考虑用户使用 vim 等需要在控制台内现实界面的软件的话,其实使用 Process 类型去启动相应程序就够了。而这次的需求则需要考虑用户会做相关设置。 这里用到的原理是伪终端。伪终端(pseudo terminal)是现

    2024年02月07日
    浏览(64)
  • ASP.NET Core Web API用户身份验证

    ASP.NET Core Web API用户身份验证的方法有很多,本文只介绍JWT方法。JWT实现了服务端无状态,在分布式服务、会话一致性、单点登录等方面凸显优势,不占用服务端资源。简单来说,JWT的验证过程如下所示: (1)通过用户名和密码获取一个Token。 (2)访问API时,加上这个Toke

    2024年02月11日
    浏览(50)
  • 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)
  • 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 Web API入门之三:使用EF Core

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

    2024年02月10日
    浏览(55)
  • 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 中基于 Controller 的 Web API

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

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

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

    2024年02月04日
    浏览(58)
  • 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)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包