我正在开发具有Core 2.0知识的webapi 我需要创建两个链接以从不同的数据库生成不同的结果,两个数据库模式都是相同的。
赞https://localhost:5000/m/University
或https://localhost:5000/v/University
它们都使用相同的webapi应用程序在不同的数据库中激活并给出结果。我可以生成结果,但我必须在启动类中创建两个webapi项目或更改连接字符串(" MConn")。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<IISOptions>(options => { options.AutomaticAuthentication = true; });
services.AddDbContext<PIDBContext>(opt => opt.UseSqlServer(Configuration.GetConnectionString("MConn")));
services.AddMvc();
}
你能帮我看看如何根据Https请求使用不同连接字符串的同一个Webapi项目吗?
由于
答案 0 :(得分:2)
找到解决方案:
创建DbContextFactory
public static class DbContextFactory
{
public static Dictionary<string, string> ConnectionStrings { get; set; }
public static void SetConnectionString(Dictionary<string, string> connStrs)
{
ConnectionStrings = connStrs;
}
public static AppContext Create(string connid)
{
if (!string.IsNullOrEmpty(connid))
{
var connStr = ConnectionStrings[connid];
var optionsBuilder = new DbContextOptionsBuilder<AppContext >();
optionsBuilder.UseSqlServer(connStr);
var db = new AppContext (optionsBuilder.Options);
return db;
}
else
{
throw new ArgumentNullException("Connection failed becuase of no Connection ID");
}
}
}
Project Json文件:
{
"ConnectionStrings": {
"Sample1con": "your 1st connection string",
"Sample2con": "your 2nd connection string"
}
}
在Startup类中的Configure方法声明Dictionary
Dictionary<string, string> connStrs = new Dictionary<string, string>();
connStrs.Add("p", Configuration.GetConnectionString("Sample1con"));
connStrs.Add("m", Configuration.GetConnectionString("Sample2con"));
DbContextFactory.SetConnectionString(connStrs);
在行动中使用
var _context = DbContextFactory.Create(db); ///Db would be your URL string.
答案 1 :(得分:1)
你必须有两个链接吗?如果没有,你不能通过以下方式实现这一目标。