ASP.NET Core Api-Gateway中间件

mMi*_*ilk 8 c# asp.net asp.net-core api-gateway ocelot

我是API网关的新手并且有一个理解的问题.我也尝试在端点后面放置一系列(微)服务.

为此,我已经设置了一个ASP.NET核心应用程序并添加了包ThreeMammals Ocelot.在文档的帮助下,我已经配置了上游和下游.到现在为止还挺好.

草图

客户端向http:// mygateway:4242/s1 / {api} 发出请求,例如,按预期从Service1获取JSON或XML响应.

对于同样的行为的http:// mygateway:4242/S2 / {} API也与预期的结果!

我的理解问题是Service3.当我向http:// mygateway/s3 /发送请求时,我将index.html作为响应.

index.html本身需要通过link-tag的CSS-File'xyz.css'并强制客户端加载文件.

<head>
  <link rel="stylesheet" type="text/css" href="xyz.css">
</head>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,客户端发送到"mygateway"的请求URL是http:// mygateway:4242/xyz.css而不是 http:// mygateway:4242/s3 /xyz.css,因此respone是404未找到,因为"mygateway"对"xyz.css"一无所知

如何修复此路由(?)问题?

是否有可能用ocelot中间件解决这个问题?或者我是否需要使用SinglePageApplication(SPA)的服务(Service3)的其他内容?

也许将SPA置于网关之后根本不可能或没有错?我希望你能给我一些提示,以便访问网关后面的SPA或MVC网站.

谢谢iBot


UPATE:附上 index.html的代码.我认为这是直截了当的.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Title</title>
    <base href="/" />

    <link rel="stylesheet" type="text/css" href="dist/xyz.css">

</head>
<body>
    <div id="appContainer"></div>
    <script src="dist/xyz.js" asp-append-version="true"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Rom*_*syk 13

你的架构设计是错误的!

首先,让我们找出 API 网关是什么。

一个API网关被编程在应用编程接口(前方,坐在API),并作为条目定义的一组微服务的单点。

使用 API 网关的一个主要好处是它们允许开发人员根据用例以多种方式封装应用程序的内部结构。这是因为,除了容纳直接请求之外,网关还可用于调用多个后端服务并聚合结果。

好的,“ API网关”这个名称向我们表明它主要用于 API 服务!SPA 或 MVC 应用程序不是后端服务。您不应将前端应用程序置于 api 网关之后。

一般来说,你的架构应该是这样的: 在此处输入图片说明

API 网关是所有客户端的单一入口点。SPA 是您服务的客户端,应该通过 API 网关调用它。如果您的应用程序有多个客户端应用程序,这可以作为识别多个 API 网关类型时的主要枢纽,以便您可以针对每个客户端应用程序的需求使用不同的外观。这种情况是一种名为“前端后端”(BFF) 的模式,其中每个 API 网关可以提供为每种客户端应用程序类型量身定制的不同 API。

如果您不想构建合适的架构怎么办?

  1. 您可以配置重定向。这类似于指定 API 网关的默认服务。然后所有去的客户端都http://mygateway:4242/将重定向到 http://mygateway:4242/s3/
  2. Ocelot 允许中间件注入。因此,您可以注入您的自定义中间件,您将在其中检查哪个请求以及将其重定向到何处。
  3. 使用 CDN 存储所有 css 和其他内容。
  4. 将 css 内联到 html 文件中。