mvc core 2.0,如何通过配置使用appSettings.json文件

2024-05-17

今天,我正在尝试新的 asp.net core 2.0,但使用 JSON 配置文件时遇到了一些麻烦,我没有在 IConfiguration 配置构造函数属性中注入该文件。

在 asp.net core 1.1 中,我将在 StartUp 中使用以下代码:

public static IConfigurationRoot Configuration;

Public Startup(IHostingEnvironment env) {
     var builder = new ConfigurationBuilder()
     .SetBasePath(env.ContentRootPath)
     .AddJsonFile("appSettings.json", optional: false, reloadOnChange: true)

  Configuration = builder.Build();
}

并可以从以下代码访问它:

private string _mailTo = Startup.Configuration["mailSettings:mailToAddress"];

然而,在 Core 2.0 中,它们更改为 IConfiguration 并且它已经定义了,而且我看不到任何可以在其他类中使用该配置的方法,所以我对如何继续感到有点无能为力。

启动类:

    using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Configuration;
using Microsoft.AspNetCore.Mvc.Formatters;
using NLog.Web;
using NLog.Extensions.Logging;
using cityInfoTestApi.Services;

namespace cityInfoTestApi
{
    public class Startup
    {

        public IConfiguration Configuration { get; private set; }

        public Startup(IConfiguration configuration, IHostingEnvironment env)
        {
            Configuration = configuration;
            env.ConfigureNLog("nlog.config");
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc()
                .AddMvcOptions(o => o.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter()));




        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddNLog();
            app.AddNLogWeb();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseStatusCodePages();
            app.UseMvc();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });


        }
    }
}

我的 json 文件:

{
    "mailSetings": {
        "mailToAddress": "[email protected] /cdn-cgi/l/email-protection",
        "mailFromAddress":  "[email protected] /cdn-cgi/l/email-protection"
    }
}

我的自定义类想要使用这些设置(请注意,这是我使用核心 1.1 的方式:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace cityInfoTestApi.Services
{
    public class LocalMailService : IMailService
    {

        private string _mailTo = Startup.Configuration["mailSettings:mailToAddress"];
        private string _mailFrom = Startup.Configuration["mailSettings:mailFromAddress"];


        public void Send(string subject, string message)
        {
            Debug.WriteLine($"Mail from {_mailFrom} to {_mailTo}, with LocalMailService");
            Debug.WriteLine($"Subject: {subject}");
            Debug.WriteLine($"Message: {message}");
        }
    }
}

任何帮助将不胜感激,干杯!


是的,ASP.NET Core 2.0 改变了配置构建的方式。你需要使用IWebHostBuilder.ConfigureAppConfiguration现在的方法。

添加这样的东西到你的IWebHost在 Program.cs 中创建:

.ConfigureAppConfiguration((builderContext, config) =>
{
    IHostingEnvironment env = builderContext.HostingEnvironment;

    config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
          .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
})

Then IConfiguration实例可能会被注入到您的Startup通过构造函数作为依赖项的类(或任何其他类,感谢 DI 机制):

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
       Configuration = configuration;
    }
    ...
 }

有一篇很好的文章描述了这些变化:ASP.NET Core 2.0 配置更改 https://joonasw.net/view/aspnet-core-2-configuration-changes


关于从自定义类访问设置的方式(例如LocalMailService) - 避免使用任何静态依赖项。 ASP.NET Core 中使用的这种破碎的 DI 概念。阅读有关使用的信息IOptions https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration?功能代替。或者你可以再次使用 DI 并得到IConfiguration通过ctor in 实例LocalMailService.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mvc core 2.0,如何通过配置使用appSettings.json文件 的相关文章

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 与 OLE 服务器或 ActiveX 控件通信

    MS Access 2010 Win 7 常规形式我没有故意放置任何 ActiveX 或 OLE 东西 甚至不确定它们是什么 但无论如何 每当我在特定形式的代码中放入某些内容时 它都会说 您作为事件属性设置输入的表达式 XXXXX 产生了以
  • Angular 2将数组传递给路由器queryString

    我想传递一个数组ids 1 2 3 像这样的路由器查询字符串 http some url ids 1 ids 2 ids 3 但是当我尝试使用 const queryParams ids 1 2 3 this router navigate
  • 使用Spring批处理从HDFS读取文件

    我必须编写一个 Spring 批处理 它将从 HDFS 读取文件并更新 MySQL DB 中的数据 HDFS 中的源文件包含一些 CSV 格式的报告数据 有人能给我举一个从 HDFS 读取文件的例子吗 Thanks The FlatFile
  • 如何将 WPF UIElement 从可视化树移动到固定页面?

    我的 MVVM 应用程序使用屏幕上的视觉对象将屏幕内容渲染到打印文档 我的视图有一个ContentControl使用DataTemplate资源来确定要显示的内容 但是当我尝试将该内容添加到FixedPage对象 我得到一个Argument
  • 如何在c#中生成8字节GUID值? [复制]

    这个问题在这里已经有答案了 可能的重复 如何从 GUID 生成 8 字节唯一 ID https stackoverflow com questions 5678177 how to generate 8 bytes unique id fr
  • flutter:动画过渡到命名路线

    当我使用Navigator pushNamed context someRoute 有一个最小的动画 从屏幕底部沿着新路线滑动 在 Android 上 在 iOS 上可能看起来不同 如何向此过渡添加自定义动画 I found 本文 http
  • Firebug 控制台窗口范围。为什么“这个”不总是一样的?

    Firebug 控制台范围 为什么 这个 不总是一样的 难道不应该一直是 窗口 吗 的价值this控制台中的值将与this在当前正在执行的代码中 考虑 function outer this is window var x n 12 var
  • 用颤动画布在形状上切一个洞

    如何使用颤动画布在形状上 切一个洞 我有一组相当复杂的形状 看起来像现实世界的物体 该物体上有一个圆角矩形形状的孔 我真的很想从形状中减去 RRect 但我找不到任何有关如何执行此操作的信息 canvas clipRRect myRRect
  • scala 返回列表中的第一个 Some

    我有一个清单l List T1 目前我正在执行以下操作 myfun T1 gt Option T2 val x Option T2 l map myfun l flatten find gt true The myfun函数返回 None
  • php - 我应该加密电子邮件地址吗?

    当用户注册时 我应该将他们的电子邮件按原样存储在数据库中还是对其进行哈希处理 我希望稍后能够解密 那么我应该使用 md5 吗 谢谢你 No md5 is 单向哈希函数 http en wikipedia org wiki Cryptogra
  • 这个对自身单位的列表理解是如何工作的?

    在 haskell IRC 频道中有人问 是否有一种简洁的方法来定义一个列表 其中第 n 个条目是之前所有条目的平方和 我认为这听起来像一个有趣的谜题 递归定义无限列表是我真正需要练习的事情之一 所以我启动了 GHCi 并开始尝试递归定义
  • 可以购买哪些 FPGA(现场可编程门阵列)在家中进行实验? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 什么是 FPGA 在哪里可以买到 它们要花多少钱 您需要什么样的系统来试验它们 如何对它们进行编程 如果这是正确的术语 您能否使用普通 M
  • TypeScript 支持互斥类型吗?

    我有一个带有参数的方法 我希望 TypeScript 验证传入的对象 在编译时 我知道运行时是一种不同的动物 仅满足允许的接口之一 Example interface Person ethnicity string interface Pe
  • 如何设置 jQuery DataTables 中特定列的最大宽度

    如何设置一个特定列的最大宽度 所有其他列应自动调整大小 我已经尝试了下面的代码 但它不起作用 因为我认为没有 最大宽度 属性 table dataTable paging false info false searching false c
  • Mockito 在调用参数数量可变的方法时使用参数匹配器

    我试图在对具有可变数量参数的方法的调用中使用参数匹配器 Java 中的东西 没有成功 我的代码如下 我还将列出我尝试用来完成此工作的所有行 import static org mockito Mockito public class Met
  • 如何绘制每条线之间具有特定距离的图形

    实际上 我尝试绘制一个图形 但它将所有列 线 放在一起并显示 因此它不具有代表性 我尝试制作模拟数据并向您展示我如何绘制它 并向您展示我想要的内容 我不知道如何制作像下面所示的示例的数据 但我在这里做了什么 set seed 1 M lt
  • Node.js 中的 PHP exit()/die() 等价物是什么

    什么是 PHP die http www php net manual de function die php http www php net manual de function die php 在 Node js 中等效吗 https
  • 如何在ionic 2中创建覆盖页面?

    当我进入新页面时如何创建透明的引导覆盖页面 我如何在 ionic 2 中实现 您可以在外部创建 div
  • php 中的简单授权/登录功能

    我希望第一次实现用户登录到我的网站 我很高兴构建自己的解决方案 或者实现一些开源的东西 但是到目前为止 在我的搜索中没有任何包是明显的选择 同样 我完全意识到 作为一名中级 php 程序员 如果我推出自己的解决方案 并真正敞开大门 我很可能
  • mvc core 2.0,如何通过配置使用appSettings.json文件

    今天 我正在尝试新的 asp net core 2 0 但使用 JSON 配置文件时遇到了一些麻烦 我没有在 IConfiguration 配置构造函数属性中注入该文件 在 asp net core 1 1 中 我将在 StartUp 中使