为客户端Blazor部署环境动态配置Http.BaseAddress [英] Dynamically configure Http.BaseAddress for Client Side Blazor Deployment Environment
本文介绍了为客户端Blazor部署环境动态配置Http.BaseAddress的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
调试:
Http.BaseAddress=新URI("https://localhost:12345");
生产:
Http.BaseAddress=新URI("https://blazorapi.azurewebsites.net");
@functions {
Book[] books;
string message;
protected override async Task OnInitAsync()
{
message = "OnInitAsync";
Http.BaseAddress = new Uri("https://blazorapi.azurewebsites.net");
books = await Http.GetJsonAsync<Book[]>("/api/BooksFunction");
message = "downloaded books";
}
}
推荐答案
更新,因为Blazor更完整:
到现在,Blazor实际上已经有了我们在其他.NET应用程序中习惯的配置过程,只是多了一点...前端-y:
您可以为特殊配置创建appsettings.json
文件,如appsettings.Release.json
。对于Blazor,您必须将其放入wwwroot
文件夹。该文件应如下所示:
{
"BaseUrl": "https://localhost:12345"
}
在您的appsettings.Release.json中,您将把您的prod url而不是本地主机。 您现在可以进入您的Program.cs并阅读如下设置:
baseAddress = builder.Configuration.GetValue<string>("BaseUrl");
builder.Services.AddSingleton(new HttpClient
{
BaseAddress = new Uri(baseAddress) }
);
现在,所有自动构造的类,如组件,都可以使用DI来获取配置的HttpClient。您只需将以下内容放在顶部:
@inject HttpClient Http
然后从那里使用它。当然,在这里使用您选择的DI作用域(暂态/作用域/单例)。
或者,如果您不想使用DI,只需将base Address保存在某个地方。
这是预览版-5,但我们现在使用RC-1更进一步
Blazor现已投入生产,无需再使用预览版本。
旧答案:
据我所知,目前还没有好的方法来获取环境,但由于这只是关于prod和dev的,您可以像我一样使用老式的编译器变量:
public class Program
{
internal const string BaseAddress = "http://localhost:81/";
internal const string ProdBaseAddress = "http://localhost:5001/";
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
var host = builder.Build();
var httpClient = host.Services.GetRequiredService<HttpClient>();
#if DEBUG
httpClient.BaseAddress = new Uri(BaseAddress);
#else
httpClient.BaseAddress = new Uri(ProdBaseAddress);
#endif
Console.WriteLine($"Set BaseAddress: {BaseAddress}");
await host.RunAsync();
}
}
只需确保在您的调试版本中实际设置了调试变量--我的调试版本没有设置。
编辑:忘记要点:在本地,您可能使用‘Debug’配置,而在部署时,您可能使用不同的配置,如‘Release’。
这篇关于为客户端Blazor部署环境动态配置Http.BaseAddress的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文