为客户端Blazor部署环境动态配置Http.BaseAddress

时间:2019-01-26 13:43:41

标签: c# blazor

在此示例Hosting Blazor中,作者拥有一个调用Azure功能的Blazor ClientSide应用程序。作者设置一个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";
  }
}

2 个答案:

答案 0 :(得分:3)

更新是因为Blazor变得更加完整:

现在,Blazor实际上具有我们习惯于从其他.NET应用程序进行的配置过程,只是更多... frontend-y:

您为特殊配置(例如<div class="box"> <div class="content"> CONTENT<br /> Some more content </div> </div>)创建了appsettings.json文件。对于Blazor,您必须将其放入appsettings.Release.json文件夹中。
该文件应如下所示:

wwwroot

然后在您的appsettings.Release.json中,将您的产品url而不是localhost放进去。 现在,您可以进入Program.cs并阅读如下设置:

{
  "BaseUrl": "https://localhost:12345"
}

现在,所有自动构造的类(如组件)都可以使用DI来获取已配置的HttpClient。您只需将其放在顶部:

baseAddress = builder.Configuration.GetValue<string>("BaseUrl");
builder.Services.AddSingleton(new HttpClient 
{ 
    BaseAddress = new Uri(baseAddress) }
);

然后从那里使用它。当然,请在此处使用您选择的DI范围(瞬态/范围/单例)。

或者,如果您不想使用DI,只需将baseAddress保存在某个地方。

这是预览5附带的,但到目前为止,我们使用RC-1

Blazor现在正在生产中,无需再使用预览版本。


旧答案:

据我所知,尚无一种“好的”方式来获取环境,但是由于它仅与prod vs dev有关,因此您可以像我一样做,而仅使用旧式的编译器变量:

@inject HttpClient Http

只需确保在调试版本中实际设置了DEBUG变量,而我的则没有。

编辑:忘记了一点:在本地,您可能会使用“调试”配置,而在部署时,您可能会使用其他配置,例如“发布”。

答案 1 :(得分:0)

以下是尝试解决此难题的尝试。如果解决方案是一堆废话,请对我温柔一点:我从来没有在Asp.Net Core和Blazor中运行过一行。

希望这对您有帮助...

将IHostingEnvironment参数添加到您的Sratup.Configure方法中

 public void Configure(IApplicationBuilder app, IHostingEnvironment env)
 {          // When not running locally
            if (!env.IsDevelopment())
            {
                // Get the HttpClient object
                var httpClient = app.ApplicationServices.GetRequiredService<HttpClient>();
                // Alter its BaseAddress property value
                httpClient.BaseAddress = new Uri("https://blazorapi.azurewebsites.net");

            }
            // When running locally let the HttpClient use its BaseAddress default property 
            // value; that is 'https://localhost            

            app.AddComponent<App>("app");
 }