ASP.NET Core3.1 Ocelot路由的实现_实用技巧

来源:脚本之家  责任编辑:小易  

ASP.net mvc5和asp.net.core有什么区别呢,前景如何:区别:asp.net mvc5只能运行在Windows,一般通过IIS发布。asp.net core开源,可跨平台,能够发布到Linux等系统上。asp.net core做了很多的整合工作,目前来说完成了最基本的一部分类库的迁移。前景:asp.net core肯定是以后的一种潮流,随着docker等技术的普及,跨平台的重要性凸显,必须要使用asp.net core编写的接口才能发布到linux中,也就是asp.net core编写的接口可以做成docker的镜像发布,而asp.net mvc5不能。所以最终肯定是会慢慢都转移到asp.net core上来。但是这需要一个比较久的过程。因为从asp.net mvc5转移到asp.net core需要一定时间的学习,即使在国外也需要一定过程。而国内由于语言环境、开发工具(需要VS2015才能进行asp.net core的开发)等的原因,肯定需要更久。国内的技术一直以来也比较保守。如果单纯的以在国内找个开发的工作的话,建议先熟悉下asp.net mvc5。如果确实有跨平台的需求,或者团队成员都对新技术有很高的热情,从事的也是全新的项目的话,就使用asp.net core。.net core:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个官方版本,具有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework),未来也将会支持 FreeBSD 与 Alpine 平台,也是微软在一开始发展时就开源的软件平台[1]  ,它经常也会拿来和现有的开源 .NET 平台 Mono 比较。由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET Core 会包含 .NET Framework 的类库,但与 .NET Framework 不同的是 .NET Core 采用包化 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 大包式安装的作法截然不同,同时各包亦有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。参考资料百度百科.百度百科[引用时间2018-1-4]www.zgxue.com防采集请勿采集本网。

1.路由

新框架没用过,.Net Core 2.0感觉应该是支持的。这里有一篇帖子,你可以参考一下。www.bamn.cn/course/volume/3991 实在不行你就转url吧,就像检测用户一样,凡是没有访问权

前一个章节我们已经介绍过Ocelot,相信大家也了解到,Ocelot的主要功能是接收客户端等传入的HTTP请求,并将其转发到下游服务。Ocelot当前仅以另一个http请求的形式支持此功能(将来可能是任何传输机制)。

不支持,core 最低是 net 4.6 以上的版本 如果使用 core 请考虑使用WIN10开发

Ocelot将一个请求路由到另一个请求。为了让Ocelot正常工作,您需要在配置中设置一个Route。下面我们就Ocelot基础项目构建简单介绍下路由功能。

在默认 ASP.NET Core 模板中为 Visual Studio 2015 及更新版本提供的 ASP.NET Web 工具扩展中涵盖的漏洞 同时还包括微软最新网页 Kestrel .NET Core 和 ASP.NET Core 支

2.Ocelot基础项目构建(APIGatewayBasicDemo)

1、CORS的原理:CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问。CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求。实现此功能非常简单,只需由

现在我们根据GitHub贡献者开源项目来学习Ocelot,根据下载下来Ocelot基础项目结构来看,我们能看到有一个网关项目(APIGateway),一个客户API项目(CustomersAPIServices),一个产品API项目(ProductsAPIServices)。如下图所示:

Foundation(WPF)并不包含在.NET Core中。从技术上讲,.NET Core仅支持控制台应用程序。ASP.NET Core和UWP是以.NET Core为基础构建的应用程序模型。NET Standard

2.1Ocelot网关配置

dll文件一般被存放在C:\\Windows\\System目录下。电脑系统文件因经常会受到病毒的侵扰,导致系统文件、dll文件等丢失、损坏,一些包括游戏在内的应用程序无法启动。 解决

APIGateway网关项目根目录下面有一个configuration.json配置文件,内容如下:

用Session传参。。

{ //Routes:处理上游请求的对象(客户端),每个数组{}就是配置:上游地址和对应下游地址 "Routes": [ { //以Downstream开头的,是要转发到下游服务器的地址(CustomersAPIServices),与nginx转发类似 //下面所有Downstream开头的,组成一个转发url,转发地址是http://localhost:9001/api/customers "DownstreamPathTemplate": "/api/customers", "DownstreamScheme": "http", // "DownstreamHost": "localhost", // "DownstreamPort": 9001, //转发到下游服务器的主机和端口。 "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9001 } ], //Upstream开头是指上游服务器(客户端)访问地址,通过http get方式访问。 //也就是说客户端访问http://localhost:9000/customers 实际是转发到了http://localhost:9001/api/customers的服务 "UpstreamPathTemplate": "/customers", "UpstreamHttpMethod": [ "Get" ] }, { "DownstreamPathTemplate": "/api/customers/{id}", "DownstreamScheme": "http", // "DownstreamHost": "localhost", // "DownstreamPort": 9001, "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9001 } ], "UpstreamPathTemplate": "/customers/{id}", "UpstreamHttpMethod": [ "Get" ] }, { "DownstreamPathTemplate": "/api/products", "DownstreamScheme": "http", // "DownstreamPort": 9002, // "DownstreamHost": "localhost", "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9002 } ], "UpstreamPathTemplate": "/products", "UpstreamHttpMethod": [ "Get" ] } ], //全局配置,允许覆盖Routes特定设置 "GlobalConfiguration": { "RequestIdKey": "OcRequestId", "AdministrationPath": "/administration" }}

那么你将会认识到 ASP.NET Core 有多完美,这感觉起来就像从古典的 ASP 时代来到全新的 ASP.NET 的世界。 现在,让我们来一探究竟 下面列出 ASP.NET Core 1.0 的核心变

下面我们就文件中这些属性进行解释:

你可以在 OSX 和 Linux上运行 ASP.NET Core 应用,这对于 ASP.NET 来说,这具有跨时代的意义,也给 ASP.NET 开发者和设计师们带来了全新的体验。ASP.NET Core 具有两个

DownstreamPathTemplate:下游路由服务地址。

因为微软没有击败Flash。 有趣的是,Visual Studio安装程序对新家庭成员.Net Core十分重视。当选择构建ASP.Net Web应用程序或想使用容器跨平台应用程序时,.Net Core是将

DownstreamScheme:下游服务地址访问协议类型http或者https。

现在有 WebUtility.UrlDecode() 与 Microsoft.AspNetCore.Http.HttpContext Microsoft.AspNetCore新的对象没有我们常用HttpUtility.UrlDecode这个方法,将URL 中传输而编码的字

DownstreamHostAndPorts:是一个数据集合,用于定义您希望将请求转发到的任何下游服务的主机和端口。通常,它仅包含一个条目,但是有时您可能希望对下游服务进行负载均衡请求,Ocelot允许您添加多个条目,然后选择一个负载均衡器。

UpstreamPathTemplate:上游服务地址,即下游服务真实访问地址。

UpstreamHttpMethod:上游服务HTTP请求方式,例如Get、Post。

GlobalConfiguration:顾名思义就是全局配置,此节点的配置允许覆盖Routes里面的配置,你可以在这里进行通用的一些配置信息。

在Ocelot中,您可以以{something}的形式将变量的占位符添加到模板中。占位符变量需要同时存在于DownstreamPathTemplate和UpstreamPathTemplate属性中。当设置为Ocelot时,Ocelot将尝试为每个请求Ocelot进程将UpstreamPathTemplate占位符中的值替换为DownstreamPathTemplate。例如上述/customers/{id}。

2.2网关项目中添加Ocelot支持

现在我们在网关项目中添加Ocelot支持,代码如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) //.UseStartup<Startup>() //设置网关url .UseUrls("http://*:9000") .ConfigureAppConfiguration((hostingContext, config) => { //添加Ocelot配置文件config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath) .AddJsonFile("configuration.json") .AddEnvironmentVariables(); }) .ConfigureServices(s => { //添加Ocelot服务 s.AddOcelot(); }) .Configure(a => { //使用Ocelot中间件 a.UseOcelot().Wait(); });

Ocelot的配置如上代码基本完成了,下面我们看看一个基础Ocelot路由正常工作流程。

2.3CustomersAPIServices和ProductsAPIServices项目

CustomersAPIServices项目的CustomersController有如下两个方法:

[Route("api/[controller]")]public class CustomersController : Controller{ [HttpGet] public IEnumerable<string> Get() { return new string[] { "Catcher Wong", "James Li" }; } [HttpGet("{id}")] public string Get(int id) { return $"Catcher Wong - {id}"; } }

ProductsAPIServices项目的ProductsController有如下一个方法:

[Route("api/[controller]")]public class ProductsController : Controller{ [HttpGet] public IEnumerable<string> Get() { return new string[] { "Surface Book 2", "Mac Book Pro" }; }}

2.4运行测试

上面这三个下游路由地址根据configuration.json配置文件都分别配置了上游分发地址,我们把这三个项目根据配置信息分别在IIS上部署起来,当然你们也可以使用dotnet run命令分别启动这个三个项目。APIGateway、CustomersAPIServices、ProductsAPIServices项目绑定主机地址分别是http://localhost:9000、http://localhost:9001、http://localhost:9002。

当我们在浏览器上打开http://localhost:9000/customers时候,会发现浏览器上输出如下信息:

为什么输入网关主机地址,返回过来却是客户主机处理结果?那是因为当客户端访问上游服务http://localhost:9000/customers时候,Ocelot会根据配置信息中下游模版把请求分发到http://localhost:9001/api/Customers/Get去处理,然后返回结果。

而当我们打开http://localhost:9000/customers/1时候,也会输出如下信息:

配置信息中上游模版/customers/{id}对应下游模版/api/customers/{id},当我们请求的路径为http://localhost:9000/customers/1时候,Ocelot会根据配置信息分发到对应的下游路由http://localhost:9001/api/Customers/Get/1去处理,然后返回结果。

同理,当客户端访问上游服务http://localhost:9000/products时候,Ocelot也会分发到对应的下游路由http://localhost:9002/api/Products去处理,然后返回结果:

根据上面测试结果,也就是说我们的Ocelot已经在起作用了,而且根据上下游路由进行了映射。当然该章节也只是简单介绍Ocelot路由功能,而configuration.json配置中有些属性还没有进行描述,例如负载均衡、限流,熔断等等。下面我会继续根据GitHub贡献者开源项目继续讲解其功能。

参考文献:

Ocelot官网

到此这篇关于ASP.NET Core3.1 Ocelot路由的实现的文章就介绍到这了,更多相关ASP.NET Core Ocelot路由内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:ASP.NET Core3.1 Ocelot认证的实现ASP.NET Core3.1 Ocelot负载均衡的实现

asp.net mvc5只能运行在Windows,一般通过IIS发布;asp.net core开源,可跨平台,能够发布到Linux等系统上。asp.net core做了很多的整合工作,目前来说完成了最基本的一部分类库的迁移。从前景上来说,asp.net core肯定是以后的一种潮流,随着docker等技术的普及,跨平台的重要性凸显,必须要使用asp.net core编写的接口才能发布到linux中,也就是asp.net core编写的接口可以做成docker的镜像发布,而asp.net mvc5不能。所以最终肯定是会慢慢都转移到asp.net core上来。但是这需要一个比较久的过程。因为从asp.net mvc5转移到asp.net core需要一定时间的学习,即使在国外也需要一定过程。而国内由于语言环境、开发工具(需要VS2015才能进行asp.net core的开发)等的原因,肯定需要更久。国内的技术一直以来也比较保守。如果单纯的以在国内找个开发的工作的话,建议先熟悉下asp.net mvc5。如果确实有跨平台的需求,或者团队成员都对新技术有很高的热情,从事的也是全新的项目的话,就使用asp.net core吧内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • .net/c#利用反射调用含ref或out参数的方法示例代码
  • 巧妙使用jquery clone 添加多行数据,并更新到数据库的实现代码
  • .net中的des对称加密详解
  • asp.net uploadify实现多附件上传功能
  • asp.net c#检查url是否有效的方法
  • asp.net aspnetpager分页统计时与实际不符的解决办法
  • asp.net core mvc 配置全局路由前缀
  • .net读取所有目录下文件正则匹配文本电子邮件
  • asp.net在repeater嵌套的repeater中使用复选框详解
  • asp.net下利用js实现对后台cs代码的调用方法
  • 请问:ASP.net mvc5和asp.net.core有什么区别呢?在今后的发展...
  • ASP.net mvc5和asp.net.core有什么区别呢?前景如何?
  • 如何评价asp.net core
  • 如何在ASP NET Core中实现CORS跨域
  • Asp.Net Core 设置 .html 页为起始页
  • xp支持asp.net core2.0么
  • 微软BUG Bounty悬赏项目扩展至.NET Core和ASP.NET Core
  • 如何在ASP NET Core中实现CORS跨域
  • netstandard和.netcore的区别
  • microsoft.aspnetcore.http 在哪个dll中
  • asp c# .net 通过onclick="window.rightbar.location.href='../c...
  • net core 是最新的.net版本吗
  • 如何查看 net core版本
  • Net 框架和.Net Core,我该用哪个?怎么选
  • .net core里面用什么代替System.Web.Service
  • 未来.net core 是什么样
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.net实用技巧asp.net core3.1 ocelot认证的实现asp.net core3.1 ocelot负载均衡的实现.net/c#利用反射调用含ref或out参数的方法示例代码巧妙使用jquery clone 添加多行数据,并更新到数据库的实现代码.net中的des对称加密详解asp.net uploadify实现多附件上传功能asp.net c#检查url是否有效的方法asp.net aspnetpager分页统计时与实际不符的解决办法asp.net core mvc 配置全局路由前缀.net读取所有目录下文件正则匹配文本电子邮件asp.net在repeater嵌套的repeater中使用复选框详解asp.net下利用js实现对后台cs代码的调用方法未将对象引用设置到对象的实例 (java正则表达式 pattern和matcheasp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"asp.net汉字转拼音和获取汉字首字asp.net mvc4中使用html.dropdownlistforasp.net中页面显示当前系统时间附图关于服务器或虚拟主机不支持 ajaxpro 的问asp.net state service状态服务的问题解决c#中遍历各类数据集合的方法总结asp.net保存pdf、word和excel文件到数据库在子页中隐藏模板页中的div示例代码discuz!nt 源文件变成乱码的解决方法asp.net实现的mvc跨数据库多表联合动态条详解开源免费且稳定实用的.net pdf打印组
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved