Blazor: Управление переменными, специфичными для среды - PullRequest
0 голосов
/ 31 января 2019

Как я могу управлять переменными доступа, которые различаются в разных средах на стороне клиента?Обычно, поскольку я использую Azure для публикации приложений, я использую файл appsettings.json для локальных настроек приложения, а затем настраиваю записи в разделе «Настройки приложения Azure» моей службы приложений для записей, которые различаются в локальных и других средах.

Пример того, чего я хочу достичь:

Клиентский Blazor:

@functions {
    //...more code here
    await Http.PostJsonAsync<object>("http://localhost:50466/api/auth/register", vm);
}

на развернутом веб-сервере это должно быть преобразовано в:

@functions {
    //...more code here
    await Http.PostJsonAsync<object>("http://wwww.mywebsite.com/api/auth/register", vm);
}

Поэтому я ищу способ сохранить корневой URL-адрес сайта в переменной окружения и преобразовать его при публикации.Есть ли способ Блазоря сделать это?

Ответы [ 2 ]

0 голосов
/ 23 июля 2019

Вы можете создать синглтон с интерфейсом конфигурации и добавить его в свои компоненты.

.csproj

<ItemGroup>
   <EmbeddedResource Include="appsettings.Development.json" Condition="'$(Configuration)' == 'Debug'">
     <LogicalName>appsettings.json</LogicalName>
   </EmbeddedResource>
   <EmbeddedResource Include="appsettings.json" Condition="'$(Configuration)' == 'Release'">
      <LogicalName>appsettings.json</LogicalName>
   </EmbeddedResource>
</ItemGroup>

Startup.cs

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton(GetConfiguration());
    }

    private IConfiguration GetConfiguration()
    {
        // Get the configuration from embedded dll.
        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("appsettings.json"))
        using (var reader = new StreamReader(stream))
        {
            return JsonConvert.DeserializeObject<IConfiguration>(reader.ReadToEnd());
        }
    }

MyComponent.razor

@inject Configuration.IConfiguration Configuration;

Или посмотрите этот выпуск

0 голосов
/ 31 января 2019

Существует несколько способов использования,

Я считаю Официальных методов еще не задокументировано!

Моя рекомендацияиспользовать старый добрый метод, используя несколько файлов конфигурации для разных сред и копируя только файлы конфигурации, которые будут использоваться в предполагаемом окружении.

Создайте папку с именем env в папке решения.и создайте подпапки с именами dev и prod .как показано ниже.

|- env
   |- dev
   |- prod
   |

Поместите различные файлы конфигурации (файлы с одинаковыми именами и различными конфигурациями) в папки dev и prod .

Создайте командный файл для копирования подходящей среды в папку wwwroot.( Я предпочитаю это, чем следующий шаг, так как это очень удобно для CI , нет необходимости устанавливать Visual Studio на сервере сборки)

ИЛИ

добавьте приведенный ниже код в post-build event проекта Blazor

if $(ConfigurationName) == Debug (
  copy /Y "$(ProjectDir)env\dev\*" "$(TargetDir)\wwwroot"
) ELSE (
  copy /Y "$(ProjectDir)env\prod\*" "$(TargetDir)\wwwroot"
)

Поскольку ваш файл конфигурации находится в папке www, вы можете легко сослаться на него изПриложение Blazor, открыв файл и прочитав, что внутри.

...