天道酬勤,学无止境

如何使用 |数据目录| 用asp.net核心替换appsettings.json中的字符串?(How to use |DataDirectory| substitution string in appsettings.json with asp.net core?)

问题
public class Startup { public Startup(IConfiguration configuration) { string path = Path.Combine(Directory.GetCurrentDirectory(), "App_Data"); AppDomain.CurrentDomain.SetData("DataDirectory", path); Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => true; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); } [...] } "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;AttachDbFilename=|DataDirectory|\\aspnet-MatrixCalculatorApp-db.mdf;Trusted_Connection=True;MultipleActiveResultSets=true" },
回答1
string path = Path.Combine(Directory.GetCurrentDirectory(), "App_Data"); services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection").Replace("[DataDirectory]", path))); services.AddDefaultIdentity<IdentityUser>() "DefaultConnection": "Server=(localdb)\\mssqllocaldb;AttachDbFilename=[DataDirectory]\\aspnet-MatrixCalculatorApp-db.mdf;Trusted_Connection=True;MultipleActiveResultSets=true"

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 自动部署后如何更改 appsettings.json 中的设置?(How can I change a setting in appsettings.json after auto-deploy?)
    问题 我有一个 ASP.NET Core 应用程序,在它上面设置了 Github 自动部署。 但由于它是一个开放式存储库,我显然不想上传正确的配置文件。 我想做的是在 github 自动部署后替换 appsettings.json 中的一些字符串。 "AppSettings": { "Token": "my super duper secret token" } 在 Azure 上部署 github 后,如何将my super duper secret token更改为我的真实令牌? 回答1 据我所知,我们可以在 Azure 端口上的应用设置中配置令牌。 我对此进行了测试,它成功运行,以下是我的详细步骤。 创建一个 Asp.net 核心应用程序。 在 appsetting.json 文件中添加 [AppSettings] 部分 ( Token vaule: mysecretkey )。 在创建的项目下添加一个公共类 AppSettings.cs。 在Startup.cs文件中的ConfigureService函数中添加代码services.Configure<AppSettings>(Configuration.GetSection("AppSettings")) (对于.net Core 1.0) 。 注意:模型绑定的语法已从 RC1 更改为 RC2。 使用services
  • 如何在 ASP.net Core 2 的 appsettings.json 中加密密码?(How do you encrypt a password within appsettings.json for ASP.net Core 2?)
    问题 我想使用我的 appsettings.json 来存储“主密码”。 然后,该主密码将用于打开由这个出色的密码存储包生成的私钥(及其后续的密码存储):https://github.com/neosmart/SecureStore 问题是,我想不出任何加密主密码的方法。 我知道在 .NET 4.5 中,可以执行以下操作: 1) 将您的密码放入 web.config 文件中 2) 运行此脚本:aspnet_regiis.exe -pef appSettings "C:\myfolder" 3)您的密码最终会被加密 - 但您的程序可以安全地读取。 https://www.codeproject.com/Articles/599416/Encrypting-ASP-NET-Application-Settings 我是在以正确的方式解决这个问题还是有更好的做法? 回答1 请记住,不要将机密存储在网站中的主要appsettings.json ,并且通常保存在源代码管理中。 使用文件提供程序将文件定位在服务器上其他位置的某个其他位置。 如果您有权访问 Azure,则可以将机密存储在 Azure Key Vault 而不是appsettings.json 。 考虑到这一点,如果您想使用 JSON 文件,您可以使用网桥或代理类来处理值的解密。 首先,您需要一个类来解密这些值。 为简洁起见
  • ASP.NET Core中的配置文件
    文章目录 启动配置信息通过GUI来设置launchSettings文件ASP.NET Core appsettings.json文件访问配置信息appsettings.json用户机密环境变量命令行参数 ASP.NET Core IConfiguration服务与依赖注入总结 启动配置信息 项目启动的时候,将会获取launchsettings.json设置信息。 我们可以在项目根目录的Properties文件夹中找到此文件当我们使用Visual Studio或.NET Core CLI运行此ASP.NET Core项目时,将使用此文件中的设置此文件仅用于本地开发环境,我们不需要把它发布到生产环境的ASP.NET Core程序中如果希望在使用ASP.NET Core发布和部署应用程序时采用某些独立的设置,请将它们存储在appsettings.json文件中。我们通常将应用程序的配置信息存储在此文件中,比如数据库连接字符串还可以使用不同环境的appsettings.json文件。比如,appsettings.Staging.json用于临时环境。在ASP.NET Core中,除appsettings.json文件外,我们还可以采用其他的配置源,如环境变量,用户机密(User Secret)、命令行(Command Line)参数,甚至自定义配置源 打开launchSettings
  • 如何从 ASP.NET Core 中的 .json 文件读取 AppSettings 值(How to read AppSettings values from a .json file in ASP.NET Core)
    问题 我在文件 appsettings/Config .json 中设置了我的 AppSettings 数据,如下所示: { "AppSettings": { "token": "1234" } } 我在网上搜索过如何从 .json 文件中读取 AppSettings 值,但我没有得到任何有用的信息。 我试过了: var configuration = new Configuration(); var appSettings = configuration.Get("AppSettings"); // null var token = configuration.Get("token"); // null 我知道使用 ASP.NET 4.0 你可以这样做: System.Configuration.ConfigurationManager.AppSettings["token"]; 但是我如何在 ASP.NET Core 中做到这一点? 回答1 这有些曲折。 我已修改此答案以与ASP.NET Core 2.0保持同步(截至 26/02/2018)。 这主要取自官方文档: 要使用 ASP.NET 应用程序中的设置,建议您仅在应用程序的Startup类中实例化Configuration 。 然后,使用选项模式访问各个设置。 假设我们有一个appsettings.json文件,如下所示:
  • 如何在.NET Core中读取连接字符串?(How to read connection string in .NET Core?)
    问题 我只想从配置文件中读取连接字符串,为此向我的项目中添加一个名称为“ appsettings.json”的文件,并在其上添加以下内容: { "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet- WebApplica71d622;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } } } 在ASP.NET上,我使用了以下方法: var temp=ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; 现在如何在C#中读取“ DefaultConnection”并将其存储在.NET Core中的字符串变量中? 回答1 您可以使用GetConnectionString扩展方法执行此操作: string conString = Microsoft
  • 从appsettings.json获取ConnectionString,而不是在.NET Core 2.0 App中进行硬编码(Get ConnectionString from appsettings.json instead of being hardcoded in .NET Core 2.0 App)
    问题 我在NET Core2.0 App中有以下课程。 // required when local database does not exist or was deleted public class ToDoContextFactory : IDesignTimeDbContextFactory<AppContext> { public AppContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder<AppContext>(); builder.UseSqlServer("Server=localhost;Database=DbName;Trusted_Connection=True;MultipleActiveResultSets=true"); return new AppContext(builder.Options); } } 当不存在数据库时,在进行迁移的Core 2.0中这是必需的,并且必须在运行update-database时创建。 升级到ASP.NET Core 2.0后无法创建迁移 我不想在2个地方(在这里和appsettings.json中)拥有ConnectionString,而仅在.json中,所以我尝试替换 "Server=localhost
  • IIS 无法运行 ASP.NET Core 站点 - HTTP 错误 502.5(IIS fails to run ASP.NET Core site - HTTP Error 502.5)
    问题 我们有一台 Windows 2012 R2 机器。 我有一个现有的 ASP.NET Core 站点,它有一个正在运行的已发布的 ASP.NET Core 站点。 但是,当我在进行更改后的一个月后今天再次发布到该站点时,我无法再访问该站点并在我的浏览器中收到以下错误 HTTP 错误 502.5 - 进程失败有关详细信息,请访问:http://go.microsoft.com/fwlink/?LinkID=808681 如果我登录到服务器并单击部署目录中的 exe,它会打开一个命令提示符并在端口 5000 上显示我的站点。如果我在 http://localhost:5000 上访问该站点,它运行良好,所以问题是使用 IIS 而不是站点本身。 如果我登录到服务器,我可以在 Windows EventViewer 中看到以下内容 具有物理根目录 'D:\Sites\MySite\' 的应用程序 'MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE/MySite' 无法使用命令行 '"%LAUNCHER_PATH%" %LAUNCHER_ARGS%' 启动进程,ErrorCode = '0x80070002 : 0。 当我访问浏览器错误消息中的链接时,它提到重新安装我所做的 .net Core Hosting 包。 但是浏览器中的错误消息是相同的。 <
  • 如何在另一个项目的上下文中读取 appsettings.json? ASP.NET 核心(How to read appsettings.json in context in another project? Asp.Net Core)
    问题 我需要在两个地方使用相同的ConnectionString 。 在我的 Web 项目Insig.Api ,它包含来自appsettings.json ConnectionString ,在另一个项目类库Insing.Infrastructure ,我的数据库上下文在哪里。 Insig.Api - Startup.cs public class Startup { public IConfiguration Configuration { get; } public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); Configuration = builder.Build(); } public void ConfigureServices
  • 试图了解 .NET Core 中 appsettings.json 与 web.config 的新行为,但对 MSDN 上的矛盾信息感到困惑(Trying to understand the new behavior of appsettings.json vs web.config in .NET Core but confused by contradictory information on MSDN)
    问题 因此,我正在阅读 MSDN 上的所有 .NET Core Fundamentals 文章,同时在 Visual Studio 2017 中编写新的 .NET Core MVC 应用程序。我在文章中阅读的内容与内容之间似乎存在一些不一致我在我的应用程序中看到。 我希望有人能帮助我理解。 因此,我了解在 Visual Studio 中创建的新 .NET Core 项目默认配置为使用 Kestrel Web 服务器和 IIS Express Web 服务器,在开发中运行时充当反向代理。 我也知道 ASP.NET Core 模块挂钩到 IIS 管道,除其他外,将流量重定向到您的 .NET Core Web 应用程序。 这就是我要挂断的东西。 来自关于 .NET Core 配置的 MSDN 文章: web.config 文件当您在 IIS > 或 IIS-Express 中托管应用程序时,需要一个 web.config 文件。 web.config 打开 IIS 中的 AspNetCoreModule 以启动您的 > 应用程序。 web.config 中的设置启用 IIS 中的 >AspNetCoreModule 以启动您的 >app 并配置其他 IIS 设置和模块。 如果您使用 Visual >Studio 并删除 web.config,Visual Studio 将创建一个新的。
  • 如何在ASP.NET Core中的任何类中访问Configuration?(How do I access Configuration in any class in ASP.NET Core?)
    问题 我已经阅读了ASP.NET Core上的配置文档。 文档说您可以从应用程序中的任何位置访问配置。 以下是模板创建的Startup.cs public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); if (env.IsEnvironment("Development")) { // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. builder.AddApplicationInsightsSettings(developerMode: true); } builder
  • 更改连接字符串后 ASP.NET Core 重新注册 dbcontext(ASP.NET Core re-registering dbcontext after changing connection string)
    问题 我有一个 ASP.NET Core 应用程序,它在配置文件中有一个连接字符串键。 如果它的值不正确(例如数据库名称、IP 地址等),我希望能够在用户在配置文件中手动更改它之后使用新的连接字符串重新注册这个 dbcontext 服务。 如何做到这一点? 这被认为是一种不好的做法吗? 谢谢你。 回答1 我看到你正在使用 asp.net 核心。 理想情况下,您不应在应用程序运行时更改连接字符串,因为它可能会导致您的 Web 应用程序复位(取决于启动配置和 Web 服务器)。 为了回答您的问题,您可以在应用程序运行时更改配置。 ReloadOnChange 参数对您很有用。 只要 appsettings.json 配置文件发生更改,下面的代码就会将 reloadOnChange 设置为 true。 public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true); })
  • 值不能为空。 参数名称:starter 中的 connectionString appsettings.json(Value cannot be null. Parameter name: connectionString appsettings.json in starter)
    问题 我试图在我的 appsettings.json 文件中写入我的连接字符串并将其放入我的启动文件中,但我不断收到一个值不能为空。 参数名称:连接字符串。 我一直在使用各种示例,但似乎无法使用 ASP.NET 1.0 Core 启动类看到这个新设置。 Appsetting.json 文件: { "Data": { "DefaultConnection": { "ConnectionString": "Data Source=server;Initial Catalog=dbase;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } } } } 尝试 Startup.cs 的方法 public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json"
  • IIS错误502.5上的ASP.NET Core 1.0(ASP.NET Core 1.0 on IIS error 502.5)
    问题 我刚刚将服务器(Windows 2012R2)从以前的.Net Core 1.0 RC2更新为.Net Core 1.0 RTM Windows Hosting Pack。 我的应用程序可以在我的PC上正常运行,但服务器始终显示: HTTP Error 502.5 - Process Failure Common causes of this issue: The application process failed to start The application process started but then stopped The application process started but failed to listen on the configured port 它以前与RC2版本一起使用。 不知道会出什么问题。 这就是事件查看器说的所有内容: Failed to start process with the commandline 'dotnet .\MyWebApp.dll'. Error code = '0x80004005'. 最糟糕的是,应用程序日志为空! 我的意思是那些stdout_xxxxxxxxx.log文件是完全空的,并且都具有0字节大小。 我应该怎么办?? 未记录错误时如何知道错误原因? 回答1 我可以通过运行来修复它 “ C:\
  • 在 Azure 上访问 ASP.NET 5 中的连接字符串(Access connection strings in ASP.NET 5 on Azure)
    问题 在 ASP.NET 5 中,我们如何以编程方式访问 Azure Web App 的连接字符串? 我已经能够检索TEST_APP_SETTINGS值,但不是TestConnString之一。 这是我尝试过的: services.Configure<AppSettings>(Configuration.GetSubKey("AppSettings")); 恐怕AppSettings不存在。 我也这样做了,应用程序设置出现了,但连接字符串没有。 启动.cs // Setup configuration sources. Configuration = new Configuration() .AddJsonFile("config.json") .AddEnvironmentVariables(); // Allow access from *.cshtml services.AddSingleton<Configuration>(provider => { return Configuration as Configuration; }); 开发者.cshtml @inject Microsoft.Framework.ConfigurationModel.Configuration config; <dl> @foreach(var k in @config.GetSubKeys
  • ASP.NET Core:从ASP.NET Web API迁移的多层数据服务应用程序
    目录 介绍 设置和运行示例应用程序 类库项目 依赖注入 访问应用程序设置 实体框架核心相关更改 主键标识插入问题 数据上下文和连接字符串 自定义存储库(Repositories) LINQ表达式翻新(仅适用于EF Core 3.0) 执行存储过程 定制模型绑定器 使用IIS Express和本地IIS 摘要 下载AspNetCore3.0_DataServices-75.8 KB下载AspNetCore2.0-2.2_DataServices-211.1 KB下载WebApi_DataServices-309.1 KB 介绍 RESTful数据服务API多年来一直是主流数据层应用程序类型。随着技术和框架的发展,旧的代码和结构将不可避免地被更新的代码和结构取代。对于将样本数据服务应用程序迁移到下一代ASP.NET或更高版本的工作,我的目标是利用更新的技术和框架的优势,但仍保持相同的功能以及请求/响应签名和工作流。因此,任何客户端应用程序都不会受到从ASP.NET Web API到ASP.NET Core或ASP.NET Core版本之间的数据服务迁移更改的影响。本文不是分步教学,读者可以根据需要查看目录中具体章节。 设置和运行示例应用程序 要使用首选的.NET Core版本运行SM.Store.CoreApi解决方案,您需要在计算机上分别安装Visual Studio
  • 来自带有实体框架核心的数据层中 appsettings.json 的 ConnectionString(ConnectionString from appsettings.json in Data Tier with Entity Framework Core)
    问题 我有一个使用 Entity Framework Core 在 ASP.NET Core 上构建的新应用程序。 该应用程序具有 UI、模型、业务和数据层。 在以前版本的 ASP.NET 中,您可以在 web.config 中设置连接字符串,默认情况下它会在引用的层中可用。 这在 ASP.NET Core 中与 appsettings.json(或其他配置选项)似乎不同? 关于这是如何实现的任何想法? 我在数据层配置了 dbcontext,但我目前正在对连接字符串进行硬编码。 我看到的所有示例都在 startup.cs 的 UI 层中配置了 dbcontext。 这是我试图避免的。 这里的问题跑题了。 回答1 您可以轻松地将 IServiceCollection 的扩展方法添加到您的业务/服务层,并使用它来注册自己的依赖项。 然后在启动时,您只需调用服务层上的方法,而无需在您的 Web 应用程序中引用 EntityFramework。 using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; namespace your.service.layer { public static class
  • 部署asp.net核心应用程序时如何处理环境差异?(How to deal with environment differences when deploying asp.net core application?)
    问题 部署ASP.NET Core应用程序时是否可以更改环境设置(例如使用调试/发布版本的配置文件转换)? 在.NET Core应用程序中维护多个环境设置的最佳方法是什么(类似于<appSettings file="local.config">用于本地,暂存和生产)? 回答1 中央配置文件是appsettings.json ,您可以有多个文件,例如appsettings.Production.json等,这些文件将被加载并覆盖来自appsettings.json设置。 例如 // Set up configuration sources. var builder = new ConfigurationBuilder() .SetBasePath(hostEnv.ContentRootPath) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{hostEnv.EnvironmentName}.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables(); 您需要做的就是设置环境类型的环境变量(请参阅此处的文档)。
  • ASP.NET Core中的配置
    此文是在官方文档的基础上做的个人笔记,一些简单的内容就没用再列出来了,参考官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 配置是使用一个或多个配置提供程序进行配置的。这个程序从如下的配置源中读取键值对,键不区分大小写: 配置文件,如appsettings.json,MySettings.json等(见读取自定义配置文件章节)环境变量Azure Key VaultAzure应用程序配置命令行参数自定义的Configuration Provider(见自定义配置提供程序从数据库读取配置章节)目录文件(见将文件名和文件内容作为键值对章节)内存中的对象(见将内存对象配置为键值对章节) 1.默认配置 Host.CreateDefaultBuilder方法按照以下顺序添加配置: ChainedConfigurationProvider:添加现有IConfiguration作为源。使用appsettings.json使用appsettings.{Environment}.jsonDevelopment环境下的App secretEnvironment Variables provider提供的环境变量Command-line
  • 如何在 Visual Studio 2015 中的一个解决方案中跨多个 ASP.NET CORE 项目共享 appsettings.json 等配置文件?(How can I share config file like appsettings.json across multiple ASP.NET CORE projects in one solution in Visual Studio 2015?)
    问题 我在一个解决方案中有 3 个 ASP.NET CORE 项目,我想在一个配置文件(如 appsettings.json)中在这些项目中共享连接字符串信息。 如何在 Visual Studio 2015 中执行此操作? 回答1 您可以像这样在每个项目上使用绝对路径(我假设appsettings.json文件位于解决方案根目录中(如 global.json)): var settingPath = Path.GetFullPath(Path.Combine(@"../../appsettings.json")); // get absolute path var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile(settingPath); 见 https://github.com/aspnet/Configuration/issues/440 回答2 设置共享 appsettings.json 文件的绝对路径。 var relativePath = @"../../The/Relative/Path"; var absolutePath = System.IO.Path.GetFullPath(relativePath); 然后像这样使用IFileProvider
  • 如何从项目根目录获取 appsettings 到 ASP.NET Core 2.0 和 EF Core 2.0 中的 IDesignTimeDbContextFactory 实现(How to get appsettings from project root to IDesignTimeDbContextFactory implementation in ASP.NET Core 2.0 and EF Core 2.0)
    问题 我正在 ASP.NET Core 2.0 中构建应用程序,但遇到 EntityFramework 迁移问题。 我在一个单独的项目 ( SolutionName \ ProjectNamePrefix .Data) 中有我的 DbContext,因此我为 IDesignTimeDbContextFactory 接口创建了一个实现。 我想为不同的环境使用不同的连接字符串,为此我需要appsettings.json 。 因此,在快速搜索后,我发现我可以在CreateDbContext函数中创建一个新的IConfigurationRoot对象,如下所示:https: CreateDbContext 我添加了它,然后为了测试,尝试从 Data 项目根文件夹运行dotnet ef migrations list -c MyContext 。 然后我收到以下错误: The configuration file 'appsettings.json' was not found and is not optional. The physical path is 'C:\dev\*SolutionName*\*ProjectNamePrefix*.Data\bin\Debug\netcoreapp2.0\appsettings.json'. 所以,基本上,我尝试了 3 个选项来获取正确的根路径: