在asp.netcore的中间件中返回具体的页面的实现方法
副问题[/!--empirenews.page--]
在 asp.net core 中,存在着中间件这一观念,在中间件中,我们可以比过滤器更早的参与到 http 哀求管道,从而实现对每一次的 http 哀求、相应做切面处理赏罚,从而实现一些非凡的成果 在行使中间件时,我们常常实现的是鉴权、哀求日记记录、全局非常处理赏罚等等这种非营业性的需求,而假如你有在 asp.net core 中行使过 swashbuckle(swagger)、health check、mini profiler 等等这样的组件的话,你会发明,这些第三方的组件每每都提供了页面,应承我们通过可视化的方法完成某些操纵或赏识某些数据 由于本身也必要实现相同的成果,固然行使到的常识点很少、也很简朴,可是在网上搜了搜也没有专门先容这块的文档或文章,以是本篇文章就来声名如安在中间件中返回页面,假如你有相同的需求,但愿可以对你有所辅佐 Step by Step 最终实现的成果着实很简朴,当用户跳转到某个指定的地点后,自界说的中间件通过匹配到该路径,从而返回指定的页面,以是这里首要会涉及到中间件是怎样建设,以及如那里理赏罚页面中的静态文件引用 由于这块并不会包括许多的代码,以是这里首要是通过说明 Swashbuckle.AspNetCore 的代码,相识它是怎样实现的这一成果,从而给我们的成果实现提供一个思绪 在 asp.net core 中行使 Swashbuckle.AspNetCore 时,我们凡是必要在 Startup 类中针对组件做如下的设置,按照当前措施的信息天生 json 文件 =》 果真天生的 json 文件地点 =》 按照 json 文件天生可视化的交互页面 public class Startup // 参数行使驼峰的定名方法 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. // 启用 swagger 可视化交互页面 可以看到最终泛起给用户的页面,着实是在 Configure 要领中通过挪用 UseSwaggerUI 要领来完成的,这个要领是在 Swashbuckle.AspNetCore.SwaggerUI 这个措施齐集,以是这里直接从 github 上找到对应的文件夹,clone 下源代码,来看下是怎样实此刻中间件中返回特定的页面 在 clone 下的代码中,解除去一些 c#、node.js 行使到的项目性文件,可以看到整个项目中的文件凭证成果可以分为三大块,个中最焦点的则是在 SwaggerUIMiddleware 类中,因此,这里首要聚焦在这此中间件类的实现 在一个 asp.net core 中间件中,焦点的处理赏罚逻辑是在 Invoke/InvokeAsync 要领中,团结我们行使 swagger 时的场景,可以看到,在将组件中所包括的页面泛起给用户时,首要存在如下两个处理赏罚逻辑 1、当匹配到用户会见的是 /swagger 时,返回 301 的 http 状态码,赏识器重定向到 /swagger/index.html,从而再次触发该中间件的执行 2、当匹配到哀求的地点为 /swagger/index.html 时,将嵌入到措施齐集的文件通过 stream 流的情势获取到,转换成字符串,再指定哀求的相应的范例为 text/html,从而实现将页面返回给用户 public async Task Invoke(HttpContext httpContext) // If the RoutePrefix is requested (with or without trailing slash), redirect to index URL RespondWithRedirect(httpContext.Response, relativeRedirectPath); if (httpMethod == "GET" && Regex.IsMatch(path, $"^/{Regex.Escape(_options.RoutePrefix)}/?index.html$")) await _staticFileMiddleware.Invoke(httpContext); 这里必要留意,由于相同于这种成果,我们也许会打包成独立的 nuget 包,然后通过 nuget 举办引用,所觉得了可以或许正确获取到页面及其行使到的静态资源文件,我们必要将这些静态文件的属性修改成嵌入的资源,从而在打包时可以包括在措施齐集 对付网页来说,在引用这些静态资源文件时存在一种相对的路径相关,因此,这里在中间件的结构函数中,我们必要将页面必要行使到的静态文件,通过构建 StaticFileMiddleware 中间件,将文件映射与网页沟通的 /swagger 路径下面,从而确保页面所需的资源可以正确加载 public class SwaggerUIMiddleware private readonly SwaggerUIOptions _options; (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |