为客户端Blazor部署环境动态配置Http.BaseAddress [英] Dynamically configure Http.BaseAddress for Client Side Blazor Deployment Environment

查看:0
本文介绍了为客户端Blazor部署环境动态配置Http.BaseAddress的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这个示例Hosting Blazor中,作者有一个调用Azure函数的Blazor ClientSide应用程序。作者设置了Http.BaseAddress。对于在以下情况下为本地URL配置客户端Blazor"Http.BaseAddress"的最佳方式有什么想法吗 将Blazor应用程序部署到Azure文件夹时的调试和Azure函数URL?

调试:
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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆