在此示例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";
}
}
答案 0 :(得分:3)
现在,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");
}