ASP.NET Core Api-网关中间件

2024-06-21

我是API网关新手,有一个理解问题。 我也尝试将一系列(微)服务放在端点后面。

为此,我设置了一个 ASP.NET Core 应用程序并添加了包三哺乳动物豹猫 https://github.com/ThreeMammals/Ocelot。 在文档的帮助下,我配置了上游和下游。 到目前为止,一切都很好。

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

同样的行为http://mygateway:4242/s2/ http://mygateway:4242/s2/{api} 也达到了预期的结果!

我的理解问题在于Service3。 当我发送请求至http://mygateway/s3/ http://mygateway/s3/,我得到 index.html 作为响应。

index.html 本身需要通过链接标记的 CSS 文件“xyz.css”,并强制客户端加载该文件。

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

在这种情况下,客户端发送到“mygateway”的请求 URL 是http://mygateway:4242/xyz.css http://mygateway:4242/xyz.css并不是http://mygateway:4242/ http://mygateway:4242/s3/xyz.css ,因此响应是 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>

你的架构设计是错误的!

首先,我们来了解一下API网关是什么。

An API网关 https://microservices.io/patterns/apigateway.html是位于应用程序编程接口前面的编程(API https://en.wikipedia.org/wiki/Application_programming_interface)并充当定义的微服务组的单一入口点。

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

好吧,名字“API网关”向我们展示了它主要用于 API 服务!SPA 或 MVC 应用程序不是后端服务。您不应该将前端应用程序放在 api 网关后面。

In general, your architecture should look like this: enter image description here

API 网关是所有客户端的单一入口点。 SPA 是您服务的客户端,应该通过 API 网关调用它。如果您的应用程序有多个客户端应用程序,那么在识别多个 API 网关类型时,这可以成为主要枢纽,以便您可以拥有不同的外观来满足每个客户端应用程序的需求。这个案例是一个名为“前端的后端”(BFF) https://samnewman.io/patterns/architectural/bff/其中每个 API 网关可以提供针对每种客户端应用程序类型定制的不同 API。

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

  1. 您可以配置重定向。这就像指定API网关的默认服务一样。然后所有去的客户http://mygateway:4242/将重定向到http://mygateway:4242/s3/
  2. Ocelot 允许中间件注入。因此,您可以注入自定义中间件,在其中检查哪个请求以及将其重定向到何处。
  3. 使用CDN来存储所有css和其他内容。
  4. 将 css 内联到 html 文件中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET Core Api-网关中间件 的相关文章

随机推荐

  • 在 iOS 中发送音频文件和 JSON 字符串

    我正在尝试将音频文件和 JSON 字符串发送到 PHP 服务器 使用以下代码将发送 JSON 但文件到达时为空 如果我将 JSON 块放在音频块下方 文件将完全到达 但 JSON 为空 有什么想法吗 void sendFile NSStri
  • 如何测试无状态组件

    我正在尝试测试下面的组件 但出现错误 它是一个带有一些数据的功能组件 下面的组件从父组件接收信息列表并渲染 它工作完美 但是在编写测 试用例时 它使用笑话和酶失败 import React from react export const I
  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • Signal R Native Android 应用程序协商失败

    我正在尝试创建一个可以连接到我的基本 SignalR Hub 的 Android 应用程序 它只是一个基本的集线器文件 我想用它来测试一些东西 但到目前为止我还没有运气 有人可以看看我做错的事情吗 每次我尝试运行它时 我都会收到以下堆栈竞赛
  • MVC @model 含义

    在MVC5中 什么是 model html and using意思是我们通常使用的原因和时间 后面跟着哪个词 例如 model MVC Project2 Models stufftable写在re cshtml页面的第一个 stufftab
  • 使用 Java 清理 CSS

    Java 中有没有一个好的库可以清理 CSS 样式表 我们希望允许管理员用户上传 CSS 样式表来控制他们管理的网站部分的外观 当然 我们不希望出现诸如background url javascript 之类的XSS攻击 因此我们正在寻找一
  • 在 C# 中读取/写入大型 XML 文件

    我正在开发一个带有 XML 数据库的应用程序 我有很大的 XML 文件 我必须在其中读取和写入数据 问题是我不想将整个 XML 文件加载到内存中 也不想因为性能问题而循环遍历整个文件 因为如果我将整个文件加载到内存中 这将影响应用程序性能
  • R - tidyr - 变异并传播多列

    我在 R 中有以下数据框 my df test lt data frame V1 c 1 2 1 V2 c A B A V3 c S1 S1 S2 V4 c x x x V5 c y y y V6 c A B C V7 c D E F my
  • 导出火力基地

    我想知道是否可以频繁 循环 导出 firebase 数据 可能作为 JSON 对象 我问这个问题的主要原因是因为我想在特定时间点捕获数据 以便对它们执行一系列分析 识别特定模式 我对属于 Firebase API 一部分的任何操作 方法感兴
  • gitignore 匹配子目录中带有前缀和后缀的文件

    我喜欢只跟踪以 es 开头并以 h 或 m 结尾的文件 所以我尝试了这个 exlude all except es h es m and exlude all except es h es m 但对于子目录中的文件都不起作用 当你忽略一切
  • Javascript 或 jQuery Flot 中的仪表图 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试获得一个看起来像仪表的图表 我已经在其他图表中使用 jQuery Flot 那么是否可以使用 Flot 或纯 Javascrip
  • 无法从自生成线程访问 FacesContext.getCurrentInstance()

    无法在自生成线程中获取 FacesContext getCurrentInstance 需要根据后端进程动态更新组件 通过创建一个线程来监视进程并回调组件更新以及 p poll 来实现相同的效果 但是 似乎 FacesContext get
  • bazel go_embed_data“无法嵌入”

    我将以下 bazel BUILD 配置为 gazelle name gazelle go embed data name static files srcs glob static package main var staticFS go
  • 如何将列表复制到数组

    我有导游名单 List
  • Vue 表单输入与现有值的绑定

    我想将输入与模型绑定 当页面加载时 输入就有一个值 但是当我与模型绑定时 当我使用 null 或空值初始化模型时 它会变空 div div
  • py2exe - 没有系统模块“pywintypes”

    我正在尝试将一个简单的 Python 脚本转换为 Windows 可执行文件 我的 setup py 脚本是 from distutils core import setup import py2exe setup name Simple
  • 主屏幕上 iPhone Web 应用程序上的 Google appengine 身份验证

    我正在使用 Google appengine 开发一个可在浏览器和 iPhone 上使用的 Web 应用程序 我已经为此应用程序购买了域名 这样我就有了一个漂亮的 URL 我用过User API http code google com a
  • Visual Studio 时间跟踪插件 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Visual Studio 是否有一个插件可以跟踪项目花费的时间以及正在处理的文件 能够每天生成一份报
  • 替换多个文件中的多个字符串

    我有一个包含正则表达式列表和替换文字字符串的文件 格式如下 OLD REGEXP 1 NEW STRING 1 OLD REGEXP 2 NEW STRING 2 我想替换所有匹配的字符串OLD REGEXP X with NEW STRI
  • ASP.NET Core Api-网关中间件

    我是API网关新手 有一个理解问题 我也尝试将一系列 微 服务放在端点后面 为此 我设置了一个 ASP NET Core 应用程序并添加了包三哺乳动物豹猫 https github com ThreeMammals Ocelot 在文档的帮