c# - 如何在blazor Webassembly中访问appsettings

标签 c# blazor blazor-client-side

我目前正在尝试将api网址保存在appsettings中。
但是,configuration.Propertiers似乎是空的。我不确定如何获取设置。
在program.cs中:

public static async Task Main(string[] args)
{
   var builder = WebAssemblyHostBuilder.CreateDefault(args);
   //string url = builder.Configuration.Properties["APIURL"].ToString();
   foreach (var prop in builder.Configuration.Properties)
      Console.WriteLine($"{prop.Key} : {prop.Value}" );
   //builder.Services.AddSingleton<Service>(new Service(url));
   builder.RootComponents.Add<App>("app");
   await builder.Build().RunAsync();
}

最佳答案

我通过使用应用程序wwwroot文件夹中的settings.json文件存储来解决此问题,并注册一个任务来获取设置:

Settings.cs

public class Settings
{
    public string ApiUrl { get; set; }
}

wwwroot/settings.json
{
   "ApiUrl": "https://localhost:51443/api"
}

Progam.cs

public static async Task Main(string[] args)
{
    var builder = WebAssemblyHostBuilder.CreateDefault(args);

    builder.Services.AddSingleton(async p =>
    {
        var httpClient = p.GetRequiredService<HttpClient>();
        return await httpClient.GetJsonAsync<Settings>("settings.json")
            .ConfigureAwait(false);
    });

SampleComponent.razor

@inject Task<Settings> getsettingsTask
@inject HttpClient client
...
@code {
    private async Task CallApi()
    {
        var settings = await getsettingsTask();
        var response = await client.GetJsonAsync<SomeResult>(settings.ApiUrl);
    }
}

这具有以下优点:
  • 不共享服务器的appsettings.json文件,这可能是一个安全漏洞
  • 每个环境可配置
  • 关于c# - 如何在blazor Webassembly中访问appsettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60552768/

    相关文章:

    asp.net-core - 在 Blazor WebAssembly 解决方案中,如何在与服务器 API 不同的端口上托管 Blazor WASM 客户端应用程序

    c# - 通过制作一个网格优化绘图 3d 模型

    c# - 转换动态 Dapper 查询

    blazor - "killed"页面是什么时候

    asp.net-core - Blazor 服务器和 SignalR 以及 Azure AD

    firebase - C# Blazor WASM | Firestore : Receiving Mixed Content error when using Google. Cloud.Firestore.FirestoreDb.CreateAsync

    async-await - Blazor WebAssembly : How to get UI to update during long running, 非异步进程

    c# - Linq 解析器问题?

    c# - 如何将 WebBrowser 从 IE 更改为 Firefox

    c# - 从 Razor 类库内部访问 Microsoft.AspNetCore.Components.Server.Circuits