在ASP.NET Core MVC項目中有一個Angular 2應用程序。 Angular 2應用程序和Startup.cs
都將具有特定環境的代碼,即。請使用http://localhost
作爲網絡服務網址,而不是http://devserver
(應在發佈時使用)。我需要以編程方式執行此操作,所以我寧願不在操作系統中設置ASPNETCORE_ENVIRONMENT
。有沒有辦法做到這一點?如何爲Angular 2和ASP.NET Core創建共享環境變量MVC
0
A
回答
0
我設法做到了這一點。不知道這是否是最佳解決方案,但對我有用。
請注意,最後我選擇了基於配置的文件(即使用.Debug.file,如果您在Debug配置中)將config作爲解決方案,而不是基於環境變量的。
創建appsettings.json
。當您按F5在調試模式下運行項目時,這將被讀取。同時設定appsettings.json
「Copy to Output directory: Copy if newer
」:
{
"AppSettings": {
"MyApiUrl": "http://localhost:23224/v1/"
}
}
創建appsettings.Debug.json
。這將被用來當您發佈項目(假設你使用Debug
配置發佈):
{
"AppSettings": {
"MyApiUrl": "http://api.server.com/v1/"
}
}
編輯您的.csproj
添加AfterBuild
事件appsettings.json
文件複製到/wwwroot
當你建立(假設你的角2應用程序在wwwroot文件夾),所以角可以讀取它:
<Target Name="AfterBuildOperations" AfterTargets="AfterBuild">
<Copy SourceFiles="$(ProjectDir)appsettings.json" DestinationFiles="$(ProjectDir)wwwroot\appsettings.json" OverwriteReadOnlyFiles="true" />
</Target>
編輯您的.csproj
重命名appsettings.Debug.json
到appsettings.json
並將其複製到文件夾wwwroot
當您發佈它。出於某種原因,VS.NET發佈包括在發佈的輸出文件夾都appsettings.json和appsettings.Debug.json:
<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; }
}
在
Startup.cs
閱讀appsettings.json
內容,並將其添加爲單到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;
}
可以注入ppSettings到你的控制器:
private AppSettings appSettings;
public MyController(AppSettings appSettings)
{
this.appSettings = appSettings;
}
添加AppSettings.ts
到您的角2
export interface AppSettings {
MyApiUrl?: string;
}
現在你可以看任何你想在角2:
private ReadAppSettings() {
this.http.get('/appsettings.json')
.map(response => response.json())
.subscribe(result => {
let appSettings: AppSettings = <AppSettings>result.AppSettings;
},
error => { console.error(error); });
}
相關問題
- 1. Docker環境變量共享
- 2. 共享主機環境中的ASP.Net MVC
- 3. 如何爲tomcat創建環境變量?
- 4. 如何在Docker中共享環境變量
- 5. Angular 2+ | ng測試環境變量
- 6. 創建事件和共享變量
- 7. 在ASP.Net中共享變量MVC 3
- 8. Angular 2 http獲取使用Asp.net Core MVC
- 9. Angular 2/ASP.NET Core * ngFor循環問題
- 10. ASP.NET MVC:創建一個環境值
- 11. MVC ASP&Javascript變量共享
- 12. 共享(Web-Farm)ASP.NET Web雙層環境
- 13. 如何從Angular 2打Asp.net Core Api
- 14. Angular 2和團隊城市生產/環境變量
- 15. ASP.NET MVC和多種環境
- 16. Ionic 2 dev和prod環境變量
- 17. 有Coldfusion和asp.net共享會話變量
- 18. Angular 2 Dart:如何在父路由器和子組件之間共享變量?
- 19. 如何爲我的程序創建環境變量
- 20. ASP.NET Core中的環境變量有什麼區別?
- 21. ASP.NET MVC和WebAPI共享令牌
- 22. 共享EXEC在環境變量的值尋找主類
- 23. 共享變量
- 24. Docker - 共享具有引用卷容器的環境變量
- 25. 在Windows和Linux環境下共享Gemfile.lock
- 26. 共享Virtualenv環境定義
- 27. 如何聲明jQuery和Angular 2 Typescript的公共變量
- 28. 使用yaml繼承的Docker共享環境變量
- 29. 共享變量
- 30. angular-cli.json中的環境變量?
你要什麼有完成這個?你只是想分開不同環境的擔憂,或者你想在應用程序運行時更改這些值嗎? – eminlala