如何使用asp.net core从appsettings.json获取配置数据并做出反应

时间:2019-06-04 14:56:08

标签: asp.net reactjs asp.net-core redux react-redux

我正在使用带有react / redux的asp.net内核,并且试图将位于react / redux中的配置数据移动到appsettings.json文件中。但是一旦配置数据被移动; ClientApp如何访问配置数据?

我正在将Reactjs和Redux入门程序用于ASP.NET Core。

更新

如果这不是推荐的存储应用程序配置的方法,请告诉我什么。

2 个答案:

答案 0 :(得分:1)

我不建议您从客户端读取配置文件。但是,如果您愿意,我建议您创建一个读取json文件并为客户端展示一些配置的服务。

您可以像这样从ASP.Net Core端进行配置

示例您在json中具有这样的配置

 "EmailSettings": {
    "MailServer": "",
    "MailPort": ,
    "Email": "",
    "Password": "",
    "SenderName": "",
    "Sender": "",
    "SysAdminEmail": ""
  },

所以您需要使用config定义匹配的模型

public class EmailSettings
{
  public string MailServer { get; set; }
  public int MailPort { get; set; }
  public string SenderName { get; set; }
  public string Sender { get; set; }
  public string Email { get; set; }
  public string Password { get; set; }
  public string SysAdminEmail { get; set; }
}

然后在Startup.cs中注册

services.Configure<EmailSettings>(configuration.GetSection("EmailSettings"));

因此您可以在服务中使用

private readonly IOptions<EmailSettings> _emailSetting;

public EmailSender(IOptions<EmailSettings> emailSetting)
{
  _emailSetting = emailSetting;
} 

public string GetConfig(){
    return _emailSetting.Value.SenderName;
}

答案 1 :(得分:1)

我建议您独立管理客户端和服务器配置。

对于服务器配置管理,appsettings.json是正确的地方。

在客户端中,您可以通过以下方式将配置作为环境变量处理:

1)为每个环境创建一个配置文件,例如:

.env.dev
.env.test
.env.prod

假设每个文件中都有“ SOME_URL”变量:

.env.dev

SOME_URL=http://localhost:4000/

.env.test

SOME_URL=http://mytesturl/

依此类推

2)使用webpack环境插件:

 plugins: options.plugins.concat([
    new webpack.EnvironmentPlugin({
      SOME_URL: JSON.stringify(process.env.SOME_URL),
     ...
    }),
  ]),

3)这是我用于启动应用程序的脚本:

"start": "cross-env env-cmd -f .env.dev node server",

4)访问客户端中的配置:

process.env.SOME_URL;

对于webpack,您正在使用在浏览器中运行的捆绑代码。 process.env上下文在浏览器中不存在。它的工作方式是,您已经告诉webpack Environment插件在捆绑的客户端代码中应该使用process.env.SOME_URL的值。捆绑时,插件仅在代码中寻找确切的文本process.env.SOME_URL并将其替换为实际值。