gpt4 book ai didi

c# - 如何使用 |DataDirectory|用 asp.net 核心替换 appsettings.json 中的字符串?

转载 作者:行者123 更新时间:2023-12-05 04:00:44 25 4
gpt4 key购买 nike

我是 asp.net core 的新手,我想做的任务应该很简单。使用 Visual Studio,我试图将 .mdf 文件作为本地数据库链接到我的项目。因为我想让它适用于多台计算机,所以我需要从 appsettings.json 中找到数据目录文件夹路径。因此,经过一些研究,最好的方法是使用 |DataDirectory| 替换字符串。

问题是我的网站无法通过这种方式访问​​我的 mdf 文件,它会生成一个 ArgumentException:“键 'attachdbfilename' 的值无效”。虽然我找到了一些关于这个问题的话题,但没有一个能回答我的问题。

我已经尝试使用完整路径来查找我的文件并且它有效,但正如我所说,我需要从多台计算机上找到它。

这里有 Startup.cs 和 appsettings.json

Startup.cs:

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);
}
[...]
}

我的连接字符串,在 appsettings.json 中:

"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;AttachDbFilename=|DataDirectory|\\aspnet-MatrixCalculatorApp-db.mdf;Trusted_Connection=True;MultipleActiveResultSets=true"
},

如果需要,我还可以提供堆栈跟踪。

预先感谢您的帮助。

最佳答案

好吧,如果有人仍然遇到和我一样的问题,我只是找到了解决方案:

您可以简单地将字符串的出现替换为您的数据文件夹的路径。

Startup.cs:

string path = Path.Combine(Directory.GetCurrentDirectory(), "App_Data");

services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection").Replace("[DataDirectory]", path)));
services.AddDefaultIdentity<IdentityUser>()

appsettings.json

"DefaultConnection": "Server=(localdb)\\mssqllocaldb;AttachDbFilename=[DataDirectory]\\aspnet-MatrixCalculatorApp-db.mdf;Trusted_Connection=True;MultipleActiveResultSets=true"

我替换了|DataDirectory|使用 [DataDirectory] 以避免程序与替换字符串混淆。但如果有人比我有更好的解释,那就太好了。

关于c# - 如何使用 |DataDirectory|用 asp.net 核心替换 appsettings.json 中的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com