我在ASP.NET Core项目中有一个Range2应用程序。Range2应用程序和Startup.cs都有特定环境的代码,即。使用http://localhost作为web服务url而不是http://devserver(在发布时应该使用)。我需要以编程的方式这样做,所以在没有在操作系统中设置ASPNETCORE_ENVIRONMENT的情况下,我是不会这样做的。有办法做到这一点吗?
发布于 2017-03-07 15:28:13
我已经成功做到了。不确定这是否是一个最佳的解决方案,但它对我有效。
请注意,最后我选择了一个基于配置的文件(即.如果您在调试配置中使用.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 (假设您的Range2应用程序位于www.root文件夹中),这样角可以读取它:
<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中的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添加到您的角度2
export interface AppSettings {
MyApiUrl?: string;
}现在你可以在你想读的任何地方读到第二角:
private ReadAppSettings() {
this.http.get('/appsettings.json')
.map(response => response.json())
.subscribe(result => {
let appSettings: AppSettings = <AppSettings>result.AppSettings;
},
error => { console.error(error); });
}https://stackoverflow.com/questions/42642600
复制相似问题