0

ASP.NET Core MVCプロジェクトにAngular 2アプリケーションがあります。 Angular 2アプリケーションとStartup.csの両方に、特定の環境、すなわち、 http://devserverの代わりにhttp://localhostをWebサービスのURLとして使用してください(公開時に使用する必要があります)。私はこれをプログラムで行う必要があるので、OSでASPNETCORE_ENVIRONMENTを設定しないと、これをしないでください。これを達成する方法はありますか?Angular 2とASP.NET Core MVCの環境変数を共有する方法

+1

あなたが達成したいかどうこの?異なる環境の懸念を分離したいのですか、アプリケーションの実行中にこれらの値を変更したいと思っていますか? – eminlala

答えて

0

私はこれを行うことができました。それが最適な解決策であるかどうかは分かりませんが、それは私のために働きます。

私は、環境変数ベースではなく、解決策としてconfigの設定ベースファイル(つまり、デバッグ設定の場合は.Debug.fileを使用)を選択しました。

作成appsettings.jsonこれは、F5キーを押してプロジェクトをデバッグモードで実行すると読み込まれます。

{ 
    "AppSettings": { 
    "MyApiUrl": "http://localhost:23224/v1/" 
    } 
} 

appsettings.Debug.jsonを作成します。また、 "Copy to Output directory: Copy if newer" appsettings.jsonを設定します。あなたは(あなたが発行するためのDebug構成を使用していると仮定して)プロジェクトを発行するときに使用されます:あなたはビルド時に/wwwrootappsettings.jsonファイルをコピーするAfterBuildイベントを追加する

{ 
    "AppSettings": { 
    "MyApiUrl": "http://api.server.com/v1/" 
    } 
} 

編集し.csproj(あなたの角度2のアプリケーションがあると仮定するとwwwrootフォルダに)ので、角度、それを読むことができます:

<Target Name="AfterBuildOperations" AfterTargets="AfterBuild"> 
    <Copy SourceFiles="$(ProjectDir)appsettings.json" DestinationFiles="$(ProjectDir)wwwroot\appsettings.json" OverwriteReadOnlyFiles="true" /> 
    </Target> 

編集して.csprojappsettings.jsonからappsettings.Debug.jsonの名前を変更し、あなたがそれを公開するとき、それがwwwrootフォルダにコピーします。

<Target Name="AfterPublishOperations" AfterTargets="AfterPublish"> 
    <Delete Files="$(ProjectDir)bin\$(ConfigurationName)\PublishOutput\appsettings.json" /> 
    <Copy SourceFiles="$(ProjectDir)bin\$(ConfigurationName)\PublishOutput\appsettings.$(ConfigurationName).json" DestinationFiles="$(ProjectDir)bin\$(ConfigurationName)\PublishOutput\appsettings.json" /> 
    <Delete Files="$(ProjectDir)bin\$(ConfigurationName)\PublishOutput\appsettings.$(ConfigurationName).json" /> 
    <Copy SourceFiles="$(ProjectDir)bin\$(ConfigurationName)\PublishOutput\appsettings.json" DestinationFiles="$(ProjectDir)bin\$(ConfigurationName)\PublishOutput\wwwroot\appsettings.json" OverwriteReadOnlyFiles="true" /> 
    </Target> 

設定は強く型付けされ得るためにあなたのプロジェクトにAppSettings.csモデルを追加します:

public class AppSettings 
    { 
     public string MyApiUrl { get; set; } 
    } 
何らかの理由VS.NETのために発行する出力フォルダ内appsettings.jsonとappsettings.Debug.jsonの両方が含まれて公開

読むappsettings.jsonStartup.cs内のコンテンツとDIコンテナにシングルトンとしてそれを追加します。

public void ConfigureServices(IServiceCollection services) 
     { 
      var appSettings = ReadConfiguration(); 
      services.AddSingleton(appSettings); 
     } 

     public AppSettings ReadConfiguration() 
     { 
      var section = Configuration.GetSection("AppSettings"); 
      var settings = new AppSettings(); 
      new ConfigureFromConfigurationOptions<AppSettings>(section).Configure(settings); 

      return settings; 
     } 

あなたはAを注入することができますお使いのコントローラにppSettings:

private AppSettings appSettings; 

public MyController(AppSettings appSettings) 
{ 
    this.appSettings = appSettings; 
} 

は今、あなたはどこでもあなたが角度2でほしいそれを読むことができ、あなたの角度2

export interface AppSettings { 
    MyApiUrl?: string; 
} 

AppSettings.tsを追加します。

private ReadAppSettings() { 
     this.http.get('/appsettings.json') 
      .map(response => response.json()) 
      .subscribe(result => { 
       let appSettings: AppSettings = <AppSettings>result.AppSettings; 
      }, 
      error => { console.error(error); }); 
    } 
関連する問題