ASP.Net Core是微软的一种开源跨平台框架,具有可扩展、精简化和模块化的优点,可用于构建高性能Web应用程序。中间件组件可以用在ASP.Net Core请求管道中,定制处理请求和响应的方式。
ASP.Net Core中间件组件还可用于检查、路由或修改流经管道的请求和响应消息。本文讨论了如何用ASP.Net Core中的中间件执行一些高级操作。
创建ASP.Net Core MVC项目
首先,不妨在Visual Studio中创建一个ASP.Net Core项目。假设你的系统中已安装Visual Studio 2017或Visual Studio 2019,按照下列步骤,在Visual Studio中创建一个新的ASP.Net Core项目。
遵循这些步骤应该可以在Visual Studio中创建一个新的ASP.Net Core项目。我们将在本文的后续部分中使用该项目。
ASP.Net Core中的Use、Run和Map等方法
Use、Map和Run等方法用于在ASP.Net Core中配置HTTP管道。下面简要介绍这每个方法及用途。
ASP.Net Core中注册中间件
ASP.Net Core中的中间件组件在Startup类的Configure方法中注册。Use *扩展方法用于注册中间件。下面是注册中间件组件的语法。
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- app.UseMyCustomMiddleware();
- }
值得一提的是,中间件组件按它们注册的顺序来加以执行。
ASP.Net Core中的Invoke方法
每个中间件组件都包含一个Invoke方法。该方法接受对HttpContext实例的引用作为实参。中间件组件可以在调用下一个中间件组件前后执行操作。下面是典型的Invoke方法的示例:
- public async Task Invoke(HttpContext context)
- {
- // Write code here that will be executed before the
- // next middleware is called
- await _next.Invoke(context); // call next middleware
- // Write code here that will be executed after the
- //next middleware is called
- }
ASP.Net Core中使HTTP管道分支
Map扩展方法(即Map和MapWhen)用于使管道分支。Map用于基于特定的请求路径来分支,而MapWhen用于基于特定断言的结果来分支。
下列代码片段表明了Map方法如何用于使请求管道分支。
- public class Startup
- {
- private static void MapRequestA(IApplicationBuilder app)
- {
- app.Run(async context =>
- {
- await context.Response.WriteAsync("This is MapRequestA");
- });
- }
- private static void MapRequestB(IApplicationBuilder app)
- {
- app.Run(async context =>
- {
- await context.Response.WriteAsync("This is MapRequestB");
- });
- }
- private static void MapRequestC(IApplicationBuilder app)
- {
- app.Run(async context =>
- {
- await context.Response.WriteAsync("This is MapRequestC");
- });
- }
- public void Configure(IApplicationBuilder app)
- {
- app.Map("/mapRequestPathA", MapRequestA);
- app.Map("/mapRequestPathB", MapRequestB);
- app.Map("/mapRequestPathB", MapRequestC);
- app.Run(async context =>
- {
- await context.Response.WriteAsync("Hello World!");
- });
- }
- //Other methods
- }
MapWhen方法接受两个参数:
你可以在Startup类的Configure方法中使用下列代码片段,不允许内容类型“text/html”。
- public void Configure(IApplicationBuilder app, IHostingEnvironment env)
- {
- if (env.IsDevelopment())
- {
- app.UseDeveloperExceptionPage();
- }
- app.MapWhen(context => context.Request.ContentType.Equals
- ("text/xml", StringComparison.InvariantCultureIgnoreCase),
- (IApplicationBuilder applicationBuilder) =>
- {
- applicationBuilder.Run(async context =>
- {
- await Task.FromResult(context.Response.StatusCode = StatusCodes.Status406NotAcceptable);
- });
- });
- app.UseMvc();
- }
ASP.Net Core中的UseWhen方法
UseWhen方法可用于有条件地执行中间件。下列代码片段表明了如果请求路径以“/api”开头,UseWhen方法如何用于执行中间件组件。
- app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), applicationBuilder =>
- {
- applicationBuilder.UseCustomMiddleware();
- });
请注意:与MapWhen不同,UseWhen方法继续执行后一个中间件,不管UseWhen断言是真还是假。不妨通过示例了解这一点。考虑下面这部分代码:
- app.UseMiddlewareA();
- app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), applicationBuilder =>
- {
- applicationBuilder.UseMiddlewareB();
- });
- app.UseMiddlewareC();
如果中间件没有短路,中间件A和C将始终执行。只有请求路径以“/api”开关,中间件B才会执行。
在ASP.Net Core中,请求处理管道中有一连串中间件组件。所有请求和响应都流经该管道。新请求进入后,这些中间件组件或处理请求,或将请求传递到管道中的下一个组件。想完成更复杂的请求处理,我们可以使用Map和MapWhen方法使管道分支,使用UseWhen有条件地执行中间件。
【译稿,合作站点转载请注明原文译者和出处为.com】
当前文章:如何使用ASP.NetCore中的条件中间件?
网页链接:http://www.shufengxianlan.com/qtweb/news45/469545.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联