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

做网站外包最牛的公司想代理产品去哪里找

做网站外包最牛的公司,想代理产品去哪里找,cad精品课网站建设,定制类做网站多少钱在本文中#xff0c;我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由。上面文章我向您演示了如何生成一个有向图#xff08;如我上篇文章[译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01中所示#xff09;#x… 在本文中我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由。上面文章我向您演示了如何生成一个有向图如我上篇文章[译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01中所示可以使用GraphVizOnline将其可视化。最后我描述了应用程序生命周期中可以检索图形数据的点。作者依乐祝原文地址https://www.cnblogs.com/yilezhu/p/13335749.html译文地址https://andrewlock.net/adding-an-endpoint-graph-to-your-aspnetcore-application/在本文中我仅展示如何创建图形的“默认”样式。在我的下一批那文章中我再创建一个自定义的writer来生成自定义的图如上篇文章所示。使用DfaGraphWriter可视化您的终结点ASP.NET Core附带了一个方便的类DfaGraphWriter可用于可视化ASP.NET Core 3.x应用程序中的终结点路由public class DfaGraphWriter {public void Write(EndpointDataSource dataSource, TextWriter writer); } 此类只有一个方法Write。EndpointDataSource包含描述您的应用程序的Endpoint集合TextWriter用于编写DOT语言图如您在前一篇文章中所见。现在我们将创建一个中间件该中间件使用DfaGraphWriter将该图编写为HTTP响应。您可以使用DI 将DfaGraphWriter和EndpointDataSource注入到构造函数中public class GraphEndpointMiddleware {// inject required services using DIprivate readonly DfaGraphWriter _graphWriter;private readonly EndpointDataSource _endpointData;public GraphEndpointMiddleware(RequestDelegate next,DfaGraphWriter graphWriter,EndpointDataSource endpointData){_graphWriter graphWriter;_endpointData endpointData;}public async Task Invoke(HttpContext context){// set the responsecontext.Response.StatusCode 200;context.Response.ContentType text/plain;// Write the response into memoryawait using (var sw new StringWriter()){// Write the graph_graphWriter.Write(_endpointData, sw);var graph sw.ToString();// Write the graph to the responseawait context.Response.WriteAsync(graph);}} } 这个中间件非常简单-我们使用依赖注入将必要的服务注入到中间件中。将图形写入响应有点复杂您必须在内存中将响应写到一个 StringWriter再将其转换为 string然后将其写到图形。这一切都是必要的因为DfaGraphWriter写入TextWriter使用同步 Stream API调用如Write而不是WriteAsync。如果有异步方法理想情况下我们将能够执行以下操作// Create a stream writer that wraps the body await using (var sw new StreamWriter(context.Response.Body)) {// write asynchronously to the streamawait _graphWriter.WriteAsync(_endpointData, sw); } 如果DfaGraphWriter使用了异步API则可以如上所述直接写入Response.Body而避免使用in-memory string。不幸的是它是同步的出于性能原因您不应该使用同步调用直接写入Response.Body。如果您尝试使用上面的模式则可能会得到如下所示内容的InvalidOperationException异常具体取决于所写图形的大小System.InvalidOperationException: Synchronous operations are disallowed. Call WriteAsync or set AllowSynchronousIO to true instead. 如果图形很小则可能不会出现此异常但是如果您尝试映射中等规模的应用程序例如带有Identity的默认Razor Pages应用程序则可以看到此异常。让我们回到正轨上-我们现在有了一个图形生成中间件所以让我们把它添加到管道中。这里有两个选择使用终结点路由将其添加为终结点。从中间件管道中将其添加为简单的“分支”。通常建议使用前一种方法将终结点添加到ASP.NET Core 3.0应用程序因此从这里开始。将图形可视化器添加为终结点为了简化终结点注册代码我将创建一个简单的扩展方法以将GraphEndpointMiddleware作为终结点添加public static class GraphEndpointMiddlewareExtensions {public static IEndpointConventionBuilder MapGraphVisualisation(this IEndpointRouteBuilder endpoints, string pattern){var pipeline endpoints.CreateApplicationBuilder().UseMiddlewareGraphEndpointMiddleware().Build();return endpoints.Map(pattern, pipeline).WithDisplayName(Endpoint Graph);} } 然后我们可以在Startup.Configure()中的UseEndpoints()方法中调用MapGraphVisualisation(/graph)将图形终结点添加到我们的ASP.NET Core应用程序中public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints {endpoints.MapHealthChecks(/healthz);endpoints.MapControllers();// Add the graph endpointendpoints.MapGraphVisualisation(/graph);}); } 这就是我们要做的。该DfaGraphWriter已经在DI中可用因此不需要额外的配置。导航至http://localhost:5000/graph将以纯文本形式生成我们的终结点图digraph DFA {0 [label/graph/]1 [label/healthz/]2 [label/api/Values/{...}/ HTTP: GET]3 [label/api/Values/{...}/ HTTP: PUT]4 [label/api/Values/{...}/ HTTP: DELETE]5 [label/api/Values/{...}/ HTTP: *]6 - 2 [labelHTTP: GET]6 - 3 [labelHTTP: PUT]6 - 4 [labelHTTP: DELETE]6 - 5 [labelHTTP: *]6 [label/api/Values/{...}/]7 [label/api/Values/ HTTP: GET]8 [label/api/Values/ HTTP: POST]9 [label/api/Values/ HTTP: *]10 - 6 [label/*]10 - 7 [labelHTTP: GET]10 - 8 [labelHTTP: POST]10 - 9 [labelHTTP: *]10 [label/api/Values/]11 - 10 [label/Values]11 [label/api/]12 - 0 [label/graph]12 - 1 [label/healthz]12 - 11 [label/api]12 [label/] } 我们可以使用GraphVizOnline进行可视化显示如下在终结点路由系统中将图形公开为终结点具有如下优点和缺点您可以轻松地向终结点添加授权。您可能不希望任何人都能查看此数据图形终结点显示为系统中的终结点。这显然是正确的但可能会很烦人。如果最后一点对您来说很重要那么您可以使用传统的方法来创建终结点即使用分支中间件。将图形可视化工具添加为中间件分支在您进行终结点路由之前将分支添加到中间件管道是创建“终结点”的最简单方法之一。它在ASP.NET Core 3.0中仍然可用它比终结点路由系统要更为简单但不能轻松添加授权或高级路由。要创建中间件分支请使用Map()命令。例如您可以使用以下命令添加分支public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {// add the graph endpoint as a branch of the pipelineapp.Map(/graph, branch branch.UseMiddlewareGraphEndpointMiddleware());app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints {endpoints.MapHealthChecks(/healthz);endpoints.MapControllers();}); } 使用此方法的优缺点在本质上与终结点路由版本相反图形中没有/graph终结点您无法轻松地将授权应用于此终结点对我来说像这样公开应用程序的图形是没有意义的。在下一节中我将展示如何通过小型集成测试来生成图形。从集成测试生成终结点图ASP.NET Core对于运行内存集成测试有很好的设计它可以在不需要进行网络调用的情况下运行完整的中间件管道和API控制器/Razor页面。除了可以用来确认应用程序整体正确运行的传统“端到端”集成测试之外我有时还喜欢编写“健全性检查”测试以确认应用程序配置正确。您可以使用在Microsoft.AspNetCore.Mvc.Testing中暴露的底层DI容器中的WebApplicationFactory设施实现。这样您就可以在应用程序的DI上下文中运行代码而无需通过单元测试。现在让我们来试下吧使用VS或dotnet new xunit来运行一个新的xUnit项目我选择的测试框架通过运行dotnet add package Microsoft.AspNetCore.Mvc.Testing安装Microsoft.AspNetCore.Mvc.Testing将测试项目的Project元素更新为Project SdkMicrosoft.NET.Sdk.Web从测试项目中引用您的ASP.NET Core项目现在我们可以创建一个简单的测试来生成终结点图并将其写入测试输出。在下面的示例中我将默认值WebApplicationFactory作为类基础设施如果您需要自定义工厂请参阅文档以获取详细信息。除了WebApplicationFactory我还注入了ITestOutputHelper。您需要使用此类来记录xUnit的测试输出。直接写Console不会起作用。。public class GenerateGraphTest: IClassFixtureWebApplicationFactoryApiRoutes.Startup {// Inject the factory and the output helperprivate readonly WebApplicationFactoryApiRoutes.Startup _factory;private readonly ITestOutputHelper _output;public GenerateGraphTest(WebApplicationFactoryStartup factory, ITestOutputHelper output){_factory factory;_output output;}[Fact]public void GenerateGraph(){// fetch the required services from the root container of the appvar graphWriter _factory.Services.GetRequiredServiceDfaGraphWriter();var endpointData _factory.Services.GetRequiredServiceEndpointDataSource();// build the graph as beforeusing (var sw new StringWriter()){graphWriter.Write(endpointData, sw);var graph sw.ToString();// write the graph to the test output_output.WriteLine(graph);}} } 测试的大部分内容与中间件相同但是我们没有编写响应而是编写了xUnit的ITestOutputHelper以将记录测试的结果输出。在Visual Studio中您可以通过以下方式查看此输出打开“测试资源管理器”导航到GenerateGraph测试然后单击“为此结果打开其他输出”这将以选项卡的形式打开结果我发现像这样的简单测试通常足以满足我的目的。在我看来有如下这些优点它不会将此数据公开为终结点对您的应用没有影响容易产生不过也许您想从应用程序中生成此图但是您不想使用到目前为止显示的任何一种中间件方法将其包括在内。如果是这样请务必小心在哪里进行。您无法在IHostedService中生成图形一般而言您可以在应用程序中任何使用依赖项注入或有权访问实例的任何位置通过IServiceProvider访问DfaGraphWriter和EndpointDataSource服务。这意味着在请求的上下文中例如从MVC控制器或Razor Page生成图很容易并且与您到目前为止所看到的方法相同。如果您要尝试在应用程序生命周期的早期生成图形则必须小心。尤其是IHostedService。在ASP.NET Core 3.0中Web基础结构是在通用主机的基础上重建的这意味着您的服务器Kestrel作为一个IHostedService在你的应用程序中运行的。在大多数情况下这不会产生太大影响但是与ASP.NET Core 2.x相比它改变了应用程序的生成顺序。在ASP.NET Core 2.x中将发生以下情况中间件管道已建立。服务器Kestrel开始侦听请求。在IHostedService实现启动。而是在ASP.NET Core 3.x上如下所示IHostedService实现启动。GenericWebHostService 启动中间件管道已建立服务器Kestrel开始侦听请求。需要注意的重要一点是直到您的IHostedServices的执行后中间件管道才会建立。由于UseEndpoints()尚未被调用EndpointDataSource将不包含任何数据如果您尝试从一个IHostedService中的DfaGraphWriter生成图表,该EndpointDataSource是空的。如果尝试使用其他标准机制来注入早期行为情况也是如此如IStartupFilter- Startup.Configure()执行之前 调用 因此EndpointDataSource将为空。同样您不能只是在Program.Main调用IHostBuilder.Build()来构建一个Host然后使用IHost.Services来访问服务直到您调用IHost.Run并且服务器已启动否则您的终结点列表将为空这些限制可能不是问题具体取决于您要实现的目标。对我来说单元测试方法可以解决我的大多数问题。无论使用哪种方法都只能生成本文中显示的“默认”终结点图。这隐藏了很多真正有用的信息例如哪些节点生成了终结点。在下一篇文章中我将展示如何创建自定义图形编写器以便您可以生成自己的图形。总结在这篇文章中我展示了如何使用DfaGraphWriter和EndpointDataSource创建应用程序中所有终结点的图形。我展示了如何创建中间件终结点来公开此数据以及如何将这种中间件与分支中间件策略一起用作终结点路由。我还展示了如何使用简单的集成测试来生成图形数据而无需运行您的应用程序。这避免了公开可能敏感的终结点图同时仍然允许轻松访问数据。最后我讨论了何时可以在应用程序的生命周期中生成图形。该EndpointDataSource未填充直到后ServerKestrel已经开始所以你主要限于在请求上下文访问数据。IHostedService和IStartupFilter执行得太早以至于无法访问数据IHostBuilder.Build()只是构建DI容器而没有构建中间件管道。往期精彩回顾【推荐】.NET Core开发实战视频课程 ★★★.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划【.NET Core微服务实战-统一身份认证】开篇及目录索引Redis基本使用及百亿数据量中的使用技巧分享附视频地址及观看指南.NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了10个小技巧助您写出高性能的ASP.NET Core代码用abp vNext快速开发Quartz.NET定时任务管理界面在ASP.NET Core中创建基于Quartz.NET托管服务轻松实现作业调度现身说法实际业务出发分析百亿数据量下的多表查询优化关于C#异步编程你应该了解的几点建议C#异步编程看这篇就够了给我好看 您看此文用  · 秒转发只需1秒呦~ 好看你就点点我
http://www.pierceye.com/news/505392/

相关文章:

  • 那个网站有免费的模板wordpress首页模板文件
  • 阿里云主机可以放几个网站手机上自己设计广告的软件
  • 南通公司企业网站建设淘宝网店制作
  • 长沙网站建设推广太仓网站建设企业网站
  • 加强网站微信信息编辑队伍建设网站设计 北京店
  • 广州网站建设有限公司程序员入门先学什么
  • 资源下载类网站如何做外链北京有几家宽带网络公司
  • 个人网站要有什么网页设计与制作初学者教程
  • 宁波品牌网站建设芗城区建设局网站
  • 仿卢松松博客网站源码购买网站空间多少钱
  • 无锡网站推微信公众号文章里好看的图片在哪个网站做
  • 做网站建设费用预算龙岩市建筑设计院
  • 网站做适配多少钱浙江建设厅特种考试查询
  • 简单的网站更新 关键词优化 关键词互联如何做网
  • 重庆网站seo搜索引擎优化网站qq登录 开发
  • 备案号放网站下面居中物流网站制作目的
  • 房产网站排名做情侣网站
  • 营销型网站建设推荐国内团购网站做的最好的是
  • 前端网站建设苏州高新区建设局网站管网
  • 中小企业网站建设中服务器的解决方案是网站建设推广总结
  • 东莞网站建设新闻资讯做赌场网站犯法么
  • wordpress怎么添加单页模版seo价格是多少
  • 网站域名有了_网站如何建设优书网首页
  • 宠物网站建设策划报告Wordpress is文章展示
  • 电子建设网站的目的阿里巴巴网站是用什么技术做的
  • 图形设计网站wordpress微信群多个二维码
  • 网站建设维护是干什么网站用户需求报告
  • 咸宁网站建设公司水网站模板
  • 移动网站开发教材seo网站排名优化价格
  • 重生做网站小说畅想网络网站建设推广