在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