Blazor的httpclient端点地址配置

3

我正在尝试使用.net core 3预览版5中的Blazor技术。

我的方案非常简单,有一个用于Web API的项目和一个用于Blazor客户端应用程序的项目。

API当前正在localhost:5000上提供服务,而Blazor应用程序在localhost:5001上运行,并且我正在使用httpclient来进行对REST端点的http调用。

我所遇到的问题之一是如何最好地避免将API服务器URL嵌入到Blazor应用程序中。

是否有一种已经建立的模式可以通过配置或运行时指定基本URL?

编辑以添加来自评论的信息:

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


你想要将 "该API目前正在本地主机的5000端口上提供服务" 固定下来吗? - Shyam Vemula
最终,我希望在我们的测试k8s集群中以容器方式运行它,这意味着api的目标url将更改为(比如)api.test.companydns.com。Blazor应用程序最终将运行在容器内部,因此理想情况下,我可以将api url作为参数传递。由于Blazor代码最终在客户端执行,因此不确定最佳实现方式。 - user2179721
2个回答

2

问题: 是否有一个既定的模式可以让我在配置或运行时指定基本URL?

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

最初的回答:

是的,在Blazor客户端上,您可以通过在/wwwroot/index.html中设置<base> HTML元素来指定基本URI。
<base href="/" />

希望这能帮到你... 最初的回答。

谢谢,我会试一下。我只是写了一个小技巧,不过如果Blazor客户端应用程序是从test.blazorapp.com提供服务,而API是api.blazorapp.com,这个方法还能行得通吗?我理解你的回答是在基本路径上加前缀(blazorapp.com/blazor)。 - user2179721

1

我已经做了一个小技巧,对我有效(发帖只是为了表明我正在努力解决问题!!):

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

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

接下来,我创建了一个AppState.cs文件,使用HttpClient下载并存储基本URL(默认的DI实例HttpClient具有提供Blazor客户端应用程序的URL的BaseURL)。
然后,通过DI使AppState类可用,现在所有我的服务都可以调用新的端点。
最后,我可以使用构建管道/CI/Docker卷/K8s配置映射根据托管环境提供相应的config.json,而无需进一步更改任何Blazor应用程序代码。

感谢您分享您所面临的问题以及您想出的解决方案。我建议在 https://github.com/aspnet/asppnetcore 存储库中提交一个问题,关于这个差距,这样Blazor团队(我也是其中一员)就知道了具体的用例,并开始收集更多细节。 - Artak
你是如何在客户端 Blazor 应用程序中读取 wwwroot 文件夹下的文件的,因为没有 IHostingEnvironment 的概念? - Saurabh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接