【问题标题】:Blazor httpclient endpoint address configsBlazor httpclient 终结点地址配置
【发布时间】:2019-10-05 09:00:58
【问题描述】:

我在 .net core 3 preview 5 中使用 Blazor。

我的解决方案非常简单,一个项目用于 web api,另一个项目用于 blazor 客户端应用程序。

api 目前在 localhost:5000 和 blazor 应用程序在 localhost:5001 上提供服务,我正在使用 httpclient 对其余端点进行 http 调用。

要努力解决的一件事是了解避免将 api 服务器 URL 烘焙到 blazor 应用程序的最佳方法。

是否有既定模式可以通过配置或运行时指定基本 url?

编辑以添加评论中的信息:

最终,我想在我们的测试 k8s 集群的容器中运行它,这意味着 api 的目标 url 将更改为(例如)api.test.companydns.com。 blazor 应用程序最终将在容器内运行,因此理想情况下我可以将 api url 作为参数传递。我不确定最好的方法,因为 blazor 代码最终在客户端执行

【问题讨论】:

  • 您希望“API 当前在 localhost:5000 上提供服务”是固定的吗?
  • 最终,我想在我们的测试 k8s 集群的容器中运行它,这意味着 api 的目标 url 将更改为(比如)api.test.companydns.com。 blazor 应用程序最终将在容器内运行,因此理想情况下我可以将 api url 作为参数传递。我不确定执行此操作的最佳方法,因为 blazor 代码最终在客户端执行。

标签: c# blazor


【解决方案1】:

问题: 是否有既定模式可以通过配置或运行时指定 base url

答案:是的,Blazor 客户端的基本 Uri 由 /wwwroot/index.html 中设置的<base> HTML 元素确定,如下所示:

<base href="/" />

希望这会有所帮助...

【讨论】:

  • 谢谢,我试试看。我只是在写一个我想出的hack。但是,如果从 test.blazorapp.com 提供 blazor 客户端应用程序并且 api 是 api.blazorapp.com,这会起作用吗?我读到你的反应是在基本路径 (blazorapp.com/blazor) 前加上前缀。
【解决方案2】:

我做了一些对我有用的破解(发布更多内容以表明我正在努力为自己解决问题!!):

我已向 wwwroot\config\config.json 添加了一个配置文件,其中包含:

{
  "apiBaseUrl": "api.url.com"
}

接下来,我创建了一个 AppState.cs,它使用 HttpClient 下载和存储基本 URL(HttpClient 的默认 DI 实例具有为 Blazor 客户端应用程序提供服务的 URL 的 BaseURL)。

然后使用 DI 使 AppState 类可用,因此现在我的所有服务都可以调用新端点。

最后,我可以使用构建管道/CI/Docker 卷/K8s 配置映射来根据托管环境提供 relivent config.json,而无需进一步更改任何 Blazor 应用程序代码。

【讨论】:

  • 感谢您分享您面临的问题以及您提出的解决方案。我建议在github.com/aspnet/asppnetcore repo 提交有关此差距的问题,以便 Blazor 背后的团队(我也是其中的一员)了解具体的用例并开始收集有关它的更多详细信息。
  • 由于没有 IHostingEnvironment 的概念,您如何能够在客户端 blazor 应用程序中读取 wwwroot 文件夹下的文件??
猜你喜欢
  • 2018-02-06
  • 2017-10-15
  • 2012-08-09
  • 1970-01-01
  • 2013-02-08
  • 2016-10-15
  • 2019-12-19
  • 1970-01-01
  • 2017-12-25
相关资源
最近更新 更多