ASP.NET Core 2.2中的Endpoint路由详解
ASP.NET Core 2.2中的Endpoint路由详解
=========================
长沙网络推广觉得非常不错的ASP.NET Core 2.2的新特性——Endpoint路由,今天特地分享给大家。这是一种全新的路由方式,为ASP.NET Core应用程序带来了许多新的特性和优势。
一、Endpoint路由概述
--
在ASP.NET Core 2.2中,引入了Endpoint路由的概念。与传统的路由系统相比,Endpoint路由将Url与Action的映射关系从Mvc中分离出来,作为独立使用的中间件。这使得我们可以在其他中间件中使用Controller和Action上的信息,例如Attribute。框架提供了LinkGenerator类,可以直接根据Endpoint生成链接,不再需要HttpContext的信息。Endpoint路由还提升了应用程序的RPS(每秒请求数)。
二、如何启用Endpoint路由
--
在ASP.NET Core 2.2中,Endpoint路由是默认启用的。如果要恢复到传统的路由逻辑,需要在服务配置中加入以下代码:
```csharp
services.AddMvc(options => { options.EnableEndpointRouting = false })
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
```
三、Endpoint路由的作用与实现原理
-
Endpoint路由的核心作用在于将Url与Action的映射关系独立处理,提供了更加灵活和高效的路由处理方式。其实现原理主要是通过MvcApplicationBuilderExtensions.cs文件中的UseMvc方法和UseEndpointRouting中间件完成的。所有的Controller中的Action都会被转换成Endpoint。在UseEndpointRouting中间件中,会根据当前路由找到对应的Endpoint,然后将其放入Feature集合中。
四、源码分析
本文分析的源代码基于ASP.NET Core 2.2.3版本。在MvcApplicationBuilderExtensions.cs文件的72行,可以看到UseMvc方法中对于EnableEndpointRouting的判断逻辑。而在MvcOptions的构造方法中,通过CompatibilitySwitch来控制EnableEndpointRouting的默认值,这就是CompatibilityVersion.Version_2_2启用Endpoint路由的原因。
Endpoint路由是ASP.NET Core 2.2中的一项重要特性,它使得路由处理更加灵活高效,也提供了更多的可能性。虽然目前Endpoint依然在UseMvc中调用,但在未来的ASP.NET Core 3.0中,将会提供更多开放的使用方式。希望这篇文章能为大家理解和使用Endpoint路由提供帮助。在132行的程序中,我们成功地在UseEndpoint中添加了一个全新的EndpointMiddleware中间件。这个中间件能够捕捉到EndpointRoutingMiddleware所找到的Endpoint,并根据其元数据信息进行深入分析,进一步定位到对应的Controller和Action,然后进行调用。这个中间件不仅让程序更加灵活,也使得对请求的处理更为精准。
在常规的UseMvc方法中,UseEndpointRouting和UseEndpoint是两个连续运行的关键中间件。由于UseEndpoint标志着请求的结束阶段,因此如果我们尝试在中间件中获取Endpoint信息,会发现无法获取到预期的Endpoint数据。这无疑给我们的自定义中间件带来了挑战。
好消息是,我们依然有一种方法可以获取到Endpoint的路由信息。那就是通过手动调用UseEndpoint。虽然这需要我们进行额外的操作,但通过这种方式,我们可以确保获取到我们需要的Endpoint路由信息。
让我们通过一个实际的例子来展示这一过程的使用情况。假设我们正在对狼蚁网站进行SEO优化工作,并希望通过日志记录来帮助我们更好地理解用户的行为和请求流程。我们可以创建一个名为LogAttribute的类,其中包含一个Message属性,这个属性可以在Action上声明并使用。接着,我们可以定义一个名为EndpointTestMiddleware的中间件,这个中间件的主要功能就是输出LogAttribute中的Message属性。通过这种方式,我们可以在用户请求的过程中收集并输出关键信息。我们只需手动调用UseEndpointRouting,然后运行我们自定义的EndpointTestMiddleware中间件即可。在这个过程中,我们可以轻松地获取到Endpoint路由信息,并据此进行进一步的处理和操作。这样的设计不仅提高了程序的灵活性,也使得我们对请求的处理更为精准和高效。在ASP.NET Core的世界里,Endpoint是一种新型的路由机制,它在解决传统路由的扩展性问题,与MVC的耦合问题以及提高服务器每秒响应数(RPS)方面表现出了显著的优势。本文将带你领略Endpoint路由的魅力,其实现原理,并通过一个生动的示例展示其应用。
在Startup.cs文件中,我们配置了Endpoint路由,并使用自定义的EndpointTestMiddleware中间件。该中间件能够获取到当前的Endpoint信息,并遍历其上的LogAttribute。LogAttribute是一个自定义的属性,用于在Controller的方法上标记需要日志记录的信息。
EndpointTestMiddleware的实现如下:
当HTTP请求到达时,Invoke方法会被调用。它尝试从httpContext.Features中获取IEndpointFeature,如果获取不到则直接调用_next中间件处理请求。如果能获取到Endpoint信息,那么它会遍历Endpoint上的所有Metadata,寻找LogAttribute并将其信息打印出来。无论是否找到LogAttribute,都会调用_next中间件处理请求。
在HomeController中,我们为Index和Privacy方法分别添加了LogAttribute标记,这样当这两个方法被调用时,EndpointTestMiddleware就会打印出相应的日志信息。
LogAttribute类的定义很简单,它是一个自定义的属性类,用于在Controller的方法上标记需要日志记录的信息。它的构造函数接收一个字符串参数message,这个字符串会被保存在Attribute的Message属性中。
Endpoint路由机制的出现,解决了传统路由难以扩展的问题,使得路由规则更加清晰、易于管理。Endpoint路由与MVC的解耦,使得我们可以更加灵活地处理HTTP请求,提高了应用的开发效率和性能。在实际应用中,我们可以根据需求自定义中间件,实现更多的功能。
本文给出的示例只是一个简单的演示,实际应用中可以根据需求进行更复杂的操作。希望本文能对你有所帮助,也希望大家能多多支持狼蚁SEO。
至于参考链接部分,由于无法提供实际的链接地址,这里留空。你可以通过搜索引擎查找相关的技术文档和教程,深入学习Endpoint路由的实现原理和应用方法。
Endpoint路由是ASP.NET Core 2.2中一项重要的特性,它为我们提供了更加灵活、高效的路由处理方式。通过本文的介绍和示例,希望能帮助你更好地理解Endpoint路由的实现原理和应用方法。
网络安全培训
- ASP.NET Core 2.2中的Endpoint路由详解
- 在ASP.Net Core中使用Lamar的全过程
- JavaScript实现简单评论功能
- yii2中关于加密解密的那些事儿
- JavaScript 正则命名分组【推荐】
- win2000server IIS和tomcat5多站点配置
- PHP内核探索:变量存储与类型使用说明
- 如何在JS中实现相互转换XML和JSON
- javascript DIV实现跟随鼠标移动
- js学习心得_一个简单的动画库封装tween.js
- 学习使用AngularJS文件上传控件
- Laravel 微信小程序后端搭建步骤详解
- Javascript设计模式之观察者模式的多个实现版本实
- flexslider.js实现移动端轮播
- vue-cli中安装方法(图文详细步骤)
- Angular实现预加载延迟模块的示例