在本例中,Hosting Blazor ,作者有一个调用 Azure Functions 的 Blazor ClientSide App。作者设置了一个Http.BaseAddress。关于在以下情况下为本地 URL 配置客户端 Blazor“Http.BaseAddress”的最佳方法的任何想法
Blazor 应用程序部署到 Azure 文件夹时的调试和 Azure Functions URL?
调试:
Http.BaseAddress = new Uri("https://localhost:12345 ");
生产:
Http.BaseAddress = new 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 而不是 localhost。您现在可以进入 Program.cs 并阅读如下设置:
baseAddress = builder.Configuration.GetValue<string>("BaseUrl");
builder.Services.AddSingleton(new HttpClient
{
BaseAddress = new Uri(baseAddress) }
);
现在所有自动构造的类,如组件,都可以使用 DI 来获取配置的 HttpClient。您只需将其放在顶部:@inject HttpClient Http
然后从那里使用它。当然,在这里使用您选择的 DI 范围( transient /范围/单例)。或者,您知道,如果您不想使用 DI,只需将 baseAddress 保存在某处。
这是preview-5,但我们现在使用RC-1更进一步
Blazor 现已投入生产,无需再玩预览版本。
旧答案:
据我所知,目前还没有获得环境的“好”方法,但由于它仅涉及生产与开发,您可以像我一样做同样的事情,只需使用老式的编译器变量:
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 变量实际上是在你的 Debug 版本中设置的——我的没有。编辑:忘记了这一点:在本地您可能使用“调试”配置,而在部署时您可能使用不同的配置,例如“发布”。
关于c# - 为客户端 Blazor 部署环境动态配置 Http.BaseAddress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54378938/