我在 ASP.NET Core MVC 项目中有一个 Angular 2 应用程序。Angular 2 应用程序和Startup.cs
特定环境的代码,即。使用http://localhost
作为Web服务的URL,而不是http://devserver
(应发布时使用)。我需要以编程方式执行此操作,因此我宁愿在未ASPNETCORE_ENVIRONMENT
在操作系统中进行设置的情况下也不执行此操作。有没有办法做到这一点?
我设法做到了这一点。不确定这是否是最佳解决方案,但对我有用。
请注意,最后我选择了一个基于配置的文件(即,如果您在调试配置中使用 .Debug.file)作为解决方案,而不是基于环境变量的配置。
创建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
(假设您的 Angular 2 应用程序位于 wwwroot 文件夹中),以便 Angular 可以读取它:
<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; }
}
读取appsettings.json
内容Startup.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;
}
您可以将 AppSettings 注入控制器:
private AppSettings appSettings;
public MyController(AppSettings appSettings)
{
this.appSettings = appSettings;
}
添加AppSettings.ts
到您的 Angular 2
export interface AppSettings {
MyApiUrl?: string;
}
现在你可以在 Angular 2 中的任何地方阅读它:
private ReadAppSettings() {
this.http.get('/appsettings.json')
.map(response => response.json())
.subscribe(result => {
let appSettings: AppSettings = <AppSettings>result.AppSettings;
},
error => { console.error(error); });
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句