首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为角2和ASP.NET Core创建一个共享环境变量

如何为角2和ASP.NET Core创建一个共享环境变量
EN

Stack Overflow用户
提问于 2017-03-07 07:30:21
回答 1查看 1.6K关注 0票数 0

我在ASP.NET Core项目中有一个Range2应用程序。Range2应用程序和Startup.cs都有特定环境的代码,即。使用http://localhost作为web服务url而不是http://devserver(在发布时应该使用)。我需要以编程的方式这样做,所以在没有在操作系统中设置ASPNETCORE_ENVIRONMENT的情况下,我是不会这样做的。有办法做到这一点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-07 15:28:13

我已经成功做到了。不确定这是否是一个最佳的解决方案,但它对我有效。

请注意,最后我选择了一个基于配置的文件(即.如果您在调试配置中使用.Debug.file作为解决方案,而不是基于环境变量的.

创建appsettings.json。当您按F5在调试模式下运行项目时,将读取此命令。还设置了appsettings.json "Copy to Output directory: Copy if newer":

代码语言:javascript
运行
复制
{
  "AppSettings": {
    "MyApiUrl": "http://localhost:23224/v1/"
  }
}

创建appsettings.Debug.json。这将在您发布项目时使用(假设您正在使用Debug配置进行发布):

代码语言:javascript
运行
复制
{
  "AppSettings": {
    "MyApiUrl": "http://api.server.com/v1/"
  }
}

编辑您的.csproj以添加AfterBuild事件,以便在构建时将appsettings.json文件复制到/wwwroot (假设您的Range2应用程序位于www.root文件夹中),这样角可以读取它:

代码语言:javascript
运行
复制
<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:

代码语言:javascript
运行
复制
<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模型添加到项目中,以获得强类型的配置:

代码语言:javascript
运行
复制
public class AppSettings
    {
        public string MyApiUrl { get; set; }
    }

读取Startup.cs中的Startup.cs内容,并将其作为单例添加到DI容器中:

代码语言:javascript
运行
复制
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注入控制器:

代码语言:javascript
运行
复制
private AppSettings appSettings;

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

AppSettings.ts添加到您的角度2

代码语言:javascript
运行
复制
export interface AppSettings {
    MyApiUrl?: string;
}

现在你可以在你想读的任何地方读到第二角:

代码语言:javascript
运行
复制
private ReadAppSettings() {
        this.http.get('/appsettings.json')
            .map(response => response.json())
            .subscribe(result => {
                let appSettings: AppSettings = <AppSettings>result.AppSettings;
            },
            error => { console.error(error); });
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42642600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档