当前位置: 首页 > news >正文

太原网站快速排名提升seo关键词优化公司哪家好

太原网站快速排名提升,seo关键词优化公司哪家好,企业网站备案要钱吗,共享看世界新域名原文#xff1a;Middleware作者#xff1a;Steve Smith and Rick Anderson翻译#xff1a;刘怡(AlexLEWIS)校对#xff1a;许登洋(Seay) 章节#xff1a; 什么是中间件用 IApplicationBuilder 创建中间件管道内置中间件编写中间件扩展资源 查看或下载样例代码 什么是中间件… 原文Middleware作者Steve Smith and Rick Anderson翻译刘怡(AlexLEWIS)校对许登洋(Seay) 章节 什么是中间件用 IApplicationBuilder 创建中间件管道内置中间件编写中间件扩展资源 查看或下载样例代码 什么是中间件 中间件是用于组成应用程序管道来处理请求和响应的组件。管道内的每一个组件都可以选择是否将请求交给下一个组件、并在管道中调用下一个组件之前和之后执行某些操作。请求委托被用来建立请求管道请求委托处理每一个 HTTP 请求。 请求委托通过使用 IApplicationBuilder 类型的 Run、Map 以及 Use 扩展方法来配置并在 Startup 类中传给 Configure 方法 。每个单独的请求委托都可以被指定为一个内嵌匿名方法或其定义在一个可重用的类中。这些可重用的类被称作 中间件 或 中间件组件。每个位于请求管道内的中间件组件负责调用管道中下一个组件或适时短路调用链。 Migrating HTTP Modules to Middleware 解释了请求管道在 ASP.NET Core 和之前版本之间的区别并提供了更多中间件样例。 用 IApplicationBuilder 创建中间件管道 ASP.NET 请求管道由一系列的请求委托所构成它们一个接着一个被调用如图所示该执行线程按黑色箭头的顺序执行 每个委托在下一个委托之前和之后都有机会执行操作。任何委托都能选择停止传递到下一个委托转而自己处理该请求。这被叫做请求管道的短路而且是一种有意义的设计因为它可以避免不必要的工作。比方说一个授权authorization中间件只有在通过身份验证之后才调用下一个委托否则它就会被短路并返回 “Not Authorized” 的响应。异常处理委托需要在管道的早期被调用这样它们就能够捕捉到发生在管道内更深层次出现的异常了。 你可以看一下 Visual Studio 2015 附带的默认 Web 站点模板关于请求管道设置的例子。Configure 方法增加了下列这些中间件组件 错误处理同时针对于开发环境和非开发环境静态文件服务器身份验证MVC 复制代码public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){loggerFactory.AddConsole(Configuration.GetSection(Logging));loggerFactory.AddDebug();    if (env.IsDevelopment()){app.UseDeveloperExceptionPage();//手工高亮app.UseDatabaseErrorPage();//手工高亮app.UseBrowserLink();//手工高亮}    else{app.UseExceptionHandler(/Home/Error);//手工高亮}app.UseStaticFiles();//手工高亮app.UseIdentity();//手工高亮// Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID532715app.UseMvc(routes //手工高亮{routes.MapRoute(name: default,            template: {controllerHome}/{actionIndex}/{id?});}); } 上面的代码中在非开发环境时UseExceptionHandler 是第一个被加入到管道中的中间件因此将会捕获之后调用中出现的任何异常。 静态文件模块 不提供授权检查由它提供的任何文件包括那些位于wwwroot 下的文件都是公开的可被访问的。如果你想基于授权来提供这些文件 将它们存放在 wwwroot 外面以及任何静态文件中间件都可访问得到的目录。利用控制器操作来判断授权是否允许如果允许则通过返回 FileResult 来提供它们。 被静态文件模块处理的请求会在管道中被短路参见 Working with Static Files。如果该请求不是由静态文件模块处理那么它就会被传给 Identity 模块 执行身份验证。如果未通过身份验证则管道将被短路。如果请求的身份验证没有失败则管道的最后一站是 MVC 框架。 注意你添加中间件组件的顺序通常会影响到它们处理请求的顺序然后在响应时则以相反的顺序返回。这对应用程序安全、性能和功能很关键。在上面的代码中静态文件中间件 在管道的早期被调用这样就能处理并及时短路管道以避免请求走到不必要的组件中。身份验证中间件被添加在任何需要身份认证的处理请求的前面。异常处理必须被注册在其它中间件之前以便捕获其它组件的异常。 最简单的 ASP.NET 应用程序是使用单个请求委托来处理所有请求。事实上在这种情况下并不存在所谓的“管道”调用单个匿名函数以相应每个 HTTP 请求。 复制代码app.Run(async context {    await context.Response.WriteAsync(Hello, World!); }); 第一个 App.Run 委托中断了管道。在下面的例子中只有第一个委托“Hello, World!”会被运行。 复制代码public void Configure(IApplicationBuilder app){app.Run(async context {        await context.Response.WriteAsync(Hello, World!);//手工高亮});app.Run(async context {        await context.Response.WriteAsync(Hello, World, Again!);}); 将多个请求委托彼此链接在一起next 参数表示管道内下一个委托。通过 不 调用 next 参数你可以中断短路管道。你通常可以在执行下一个委托之前和之后执行一些操作如下例所示 复制代码public void ConfigureLogInline(IApplicationBuilder app, ILoggerFactory loggerfactory){loggerfactory.AddConsole(minLevel: LogLevel.Information);    var logger loggerfactory.CreateLogger(_environment);app.Use(async (context, next) //手工高亮{logger.LogInformation(Handling request.);        await next.Invoke();//手工高亮logger.LogInformation(Finished handling request.);});app.Run(async context {        await context.Response.WriteAsync(Hello from _environment);//手工高亮}); } 警告应当避免在修改了 HttpResponse 之后还调用管道内下一个会修改响应的组件从而导致它被送到客户端处。 提示当应用程序运行的环境设置为 LogInline 时这个 ConfigureLogInline 方法就会被调动。要了解更多请访问环境 Working with Multiple Environments 一章。本文剩下的篇幅将使用变化的 Configure[Environment] 来展示不同的选项。 Visual Studio 中运行示例代码的最简单办法是使用 web 命令该命令由 project.json 文件所配置。也可参考 Application Startup 。 在上例中调用 await next.Invoke() 将会调用下一个委托await context.Response.WriteAsync(Hello from   _environment);。客户端将收到预期的响应“Hello from LogInline”同时服务端这边的控制台将先后输出如下信息 RunMap 与 Use 你可以使用 Run、Map 和 Use 配置 HTTP 管道。Run 方法将会短路管道因为它不会调用 next 请求委托。因此Run 应该只能在你的管道尾部被调用。Run 是一种惯例有些中间件组件可能会暴露他们自己的 Run[Middleware] 方法而这些方法只能在管道末尾处运行。下面这两个中间件等价的其中有用到 Use 的版本没有使用 next 参数 复制代码public void ConfigureEnvironmentOne(IApplicationBuilder app){app.Run(async context //手工高亮{        await context.Response.WriteAsync(Hello from _environment);}); }public void ConfigureEnvironmentTwo(IApplicationBuilder app){app.Use(async (context, next) //手工高亮{        await context.Response.WriteAsync(Hello from _environment);}); } 注意IApplicationBuilder 接口向外暴露了一个 Use 方法因此从技术上来说它们并不完全是 扩展 方法。 我们已经看了几个关于如何通过 Use 构建请求管道的例子同时约定了 Map*扩展被用于分支管道。当前的实现已支持基于请求路径或使用谓词来进入分支。Map 扩展方法用于匹配基于请求路径的请求委托。Map 只接受路径并配置单独的中间件管道的功能。在下例中任何基于路径 /maptest 的请求都会被管道中所配置的 HandleMapTest 方法所处理。 复制代码private static void HandleMapTest(IApplicationBuilder app){app.Run(async context {        await context.Response.WriteAsync(Map Test Successful);}); }public void ConfigureMapping(IApplicationBuilder app){app.Map(/maptest, HandleMapTest);//手工高亮} 注意当使用了 Map每个请求所匹配的路径段将从 HttpRequest.Path 中移除 并附加到 HttpRequest.PathBase 中。 除基于路径的映射外MapWhen 方法还支持基于谓词的中间件分支允许以非常灵活的方式构建单独的管道。任何 FuncHttpContext, bool 类型的谓语都被用于将请求映射到新的管到分支。在下例中使用了一个简单的谓词来检测查询字符串变量 branch 是否存在 复制代码private static void HandleBranch(IApplicationBuilder app){app.Run(async context {        await context.Response.WriteAsync(Branch used.);//手工高亮}); }public void ConfigureMapWhen(IApplicationBuilder app){app.MapWhen(context {//手工高亮return context.Request.Query.ContainsKey(branch);//手工高亮}, HandleBranch);//手工高亮app.Run(async context {        await context.Response.WriteAsync(Hello from _environment);}); } 使用了上述设置后任何包含请求字符 branch 的请求将使用定义于HandleBranch 方法内的管道其响应就将是“Branch used.”。其他请求即没有为 branch 定义查询字符串值将被第 17 行所定义的委托处理。 你也可以嵌套映射 复制代码app.Map(/level1, level1App {level1App.Map(/level2a, level2AApp {        // /level1/level2a//...});level1App.Map(/level2b, level2BApp {        // /level1/level2b//...}); }); 内置中间件 ASP.NET 带来了下列中间件组件 中间件描述身份验证Authentication提供身份验证支持。跨域资源共享CORS配置跨域资源共享。CORS 全称为 Cross-Origin Resource Sharing。路由Routing定义和约定请求路由。会话Session提供对管理用户会话session的支持。静态文件提供对静态文件服务于目录浏览的支持。 编写中间件 CodeLabs 中间件教程 提供了一个清晰介绍用于编写中间件。 对于更复杂的请求处理功能ASP.NET 团队推荐在他们自己的类中实现中间件并暴露 IApplicationBuilder 扩展方法这样就能通过 Configure 方法来被调用。之前演示的简易日志中间件就能被转换为一个中间件类middleware class只要在其构造函数中获得下一个 RequestDelegate 并提供一个 Invoke方法如下所示 复制代码using System.Threading.Tasks;using Microsoft.AspNetCore.Http;using Microsoft.Extensions.Logging;namespace MiddlewareSample{    public class RequestLoggerMiddleware{        private readonly RequestDelegate _next;        private readonly ILogger _logger;        public RequestLoggerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)//手工高亮        {_next next;_logger loggerFactory.CreateLoggerRequestLoggerMiddleware();}        public async Task Invoke(HttpContext context)//手工高亮        {_logger.LogInformation(Handling request: context.Request.Path);            await _next.Invoke(context);_logger.LogInformation(Finished handling request.);}} } 中间件遵循 显式依赖原则 并在其构造函数中暴露所有依赖项。中间件能够利用到 UseMiddleware  扩展方法的优势直接通过它们的构造函数注入服务就像下面的例子所示。依赖注入服务是自动完成填充的扩展所用到的 params 参数数组被用于非注入参数。 复制代码public static class RequestLoggerExtensions{    public static IApplicationBuilder UseRequestLogger(this IApplicationBuilder builder)    {        return builder.UseMiddlewareRequestLoggerMiddleware();//手工高亮} } 通过使用扩展方法和相关中间件类Configure 方法变得非常简洁和高可读性。 复制代码public void ConfigureLogMiddleware(IApplicationBuilder app,    ILoggerFactory loggerfactory){loggerfactory.AddConsole(minLevel: LogLevel.Information);app.UseRequestLogger();//手工高亮app.Run(async context {        await context.Response.WriteAsync(Hello from _environment);}); } 尽管 RequestLoggerMiddleware 在其构造函数中需要 ILoggerFactory 参数但无论是 Startup 类还是 UseRequestLogger 扩展方法都不需要显式依赖之。相反它将自动地通过内置的 UseMiddlewareT 来执行依赖注入以提供之。 测试中间件通过给 LogMiddleware 设置 Hosting:Environment 环境变量会输出下图的结果当时用了 WebListener 时 注意UseStaticFiles 扩展方法该方法会创建 StaticFileMiddleware同样也使用了 UseMiddlewareT。所以除了 StaticFileOptions 参数被传入之外构造函数的其他参数都由 UseMiddlewareT 和依赖注入所提供。 原文地址http://www.cnblogs.com/dotNETCoreSG/p/aspnetcore-3_2-middleware.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注 赞赏 人赞赏
http://www.sadfv.cn/news/12127/

相关文章:

  • 长春建站的费用谷歌竞价排名推广公司
  • 世界购物网站排名网站怎么做才能让更多平台展现
  • 网站开发网页制作薪资旅游网站建设的目的
  • 合肥建设银行网站首页有哪些单页网站
  • 辽宁智能网站建设推荐wordpress百度云盘
  • 鲜花销售网站开发费用怎么做营销
  • 广告公司寮步网站建设山东网站建设哪家权威
  • 软件网站建设专业网站建设一个月做十单
  • 智慧团建网站入口官网数据模型搭建工具
  • 微信朋友圈网站广告怎么做做网站服务怎么赚钱
  • 沈阳网站建设公司的公司海南网上房地产
  • 鞋网站建设方案如何用dw做网站首页
  • ps做网站图片牙克石网站建设
  • 网站开发 html中国建设门户网站
  • 山西建筑劳务网站网站开发 在线支付
  • 免费快速网站动画设计属于什么专业类别
  • 易网 网站建设自建网站避免侵权
  • 安徽省建设厅证书查询官方网站wordpress更换域名后显示空白
  • 云南火电建设公司网站网站绿标怎么做
  • 上海市建设合同信息表网站做诱导网站
  • 做蛋糕网站的 实训报告图wordpress ip地址修改
  • 成都中小企业申请网站郑州百姓网征婚交友
  • 网站构建是什么低内存vps搭建WordPress
  • 临沂国际外贸网站建设.vip网站 被百度收录
  • 惠州自适应网站建设外包接单网
  • 网站做微信支付网站开发团队人员构成
  • 南昌网站开发制作公司纪检监察网站建设的意义
  • 论坛网站需要多大的空间手机端的网站怎么做的
  • 网站建设需要注意什么 知乎湛江市seo网站设计报价
  • 建立网站代码seo优化是什么职位