Как получить доступ к настройкам приложения в веб-сборке Blazor - PullRequest
3 голосов
/ 05 марта 2020

Я пытаюсь сохранить URL-адрес API в appsettings. Тем не менее, конфигурация. Свойства кажутся пустыми. Я не уверен, как получить настройки. в 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();
}

Ответы [ 3 ]

2 голосов
/ 06 марта 2020

Я решаю эту проблему, используя настройки. json, сохраняйте файл в папке приложения wwwroot и регистрируйте задачу для получения настроек:

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);
    }
}

Это имеет преимущества:

  • Не разделяет настроек сервера. json файл, который может быть дырой в безопасности
  • Конфигурируемый для среды
0 голосов
/ 03 апреля 2020

На данный момент вы можете использовать IConfiguration.

appsettings. json:

{
  "Services": {
    "apiURL": "https://localhost:11111/"
  }
}

.

using Microsoft.Extensions.Configuration;

public class APIHelper
    {
        private string apiURL;

        public APIHelper(IConfiguration config)
        {
            apiURL = config.GetSection("Services")["apiURL"];
            //Other Stuff
        }

    }
0 голосов
/ 05 марта 2020

в качестве примера, я реализовал его следующим образом (Blazor на стороне клиента):

appsettings. json:

{
    "api": "https://www.webapiurl.com/"
    "ForceHTTPS": false
}

затем набрал класс конфигурации

 public class APISetting
    {

        public string api { get; set; }

        public bool ForceHTTPS { get; set; }

    }

затем загрузка при запуске:

public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton(GetConfiguration());
        }
        public void Configure(IComponentsApplicationBuilder app )
        {
            app.AddComponent<App>("app");
        }

        public APISetting GetConfiguration()
        {
            using (var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("appsettings.json"))
            using (var reader = new System.IO.StreamReader(stream))
            {
                return System.Text.Json.JsonSerializer.Deserialize<APISetting>(reader.ReadToEnd());
            }
        }
    }
...