如何在ASP.NET Core中使用appsettings.json中的|DataDirectory|替换字符串?

3
我刚接触asp.net core,我想要做的任务应该非常简单。我正在使用Visual Studio将一个.mdf文件作为本地数据库链接到我的项目中。因为我想让它在多台电脑上都能正常运行,所以需要从appsettings.json中找到数据目录文件夹路径。因此,在一些研究后,最好的方法是使用|DataDirectory|替换字符串。
问题是我的网站不能通过这种方式访问我的mdf文件,会生成一个ArgumentException异常:"Invalid value for key 'attachdbfilename'"。虽然我找到了一些关于这个问题的话题,但没有一个回答了我的问题。
我已经尝试过使用完整路径来查找我的文件,这也可以工作,但如我所说,我需要从多台电脑上找到它。
这里有Startup.cs和appsettings.json。
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"
  },

如果需要,我也可以提供堆栈跟踪。
非常感谢你的帮助。
1个回答

3

如果有人遇到和我一样的问题,我找到了解决方法:

你可以用数据文件夹的路径替换字符串的出现。

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],以避免程序混淆替换字符串。但如果有更好的解释,请分享出来。

我遇到了同样的情况。肯定有更好的方法来解决这个问题,但是我没有找到任何关于此的文档。你的解决方案有效。谢谢。 - SamyCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接