繁体   English   中英

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

[英]how to get config data from appsettings.json with asp.net core & react

我正在将 asp.net core 与 react/redux 一起使用,并且我正在尝试将 react/redux 中的配置数据移动到 appsettings.json 文件中。 但是一旦配置数据被移动; ClientApp 如何访问配置数据?

我正在将 Reactjs 与 Redux starter 一起用于 ASP.NET Core。

更新

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

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

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

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

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

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

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

.env.dev

SOME_URL=http://localhost:4000/

.env.test

SOME_URL=http://mytesturl/

等等等等

  1. 使用 webpack 环境插件:

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

  2. 这是我用于启动应用程序的脚本:

    "start": "cross-env env-cmd -f .env.dev 节点服务器",

  3. 在客户端访问配置:

    process.env.SOME_URL;

  4. npm i env-cmd

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

我不建议从您的客户端读取配置文件。 但是,如果您想这样做,我建议您创建一个服务来读取 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM