C# 基于webapi的动态实体框架

C# 基于webapi的动态实体框架,c#,asp.net-web-api,entity-framework-4,C#,Asp.net Web Api,Entity Framework 4,我正在使用实体框架的web api项目,我计划将实体框架作为动态框架[在运行时更改连接字符串] 在一个普通的MVC应用程序中,我是这样做的 public class ApiRepository { public WebApiLabDbEntities dbContext; public ApiRepository() { string connection_string = (string)(System.Web.HttpContext.Current.

我正在使用实体框架的web api项目,我计划将实体框架作为动态框架[在运行时更改连接字符串]

在一个普通的MVC应用程序中,我是这样做的

public class ApiRepository
{
    public WebApiLabDbEntities dbContext; 
    public ApiRepository()
    {
        string connection_string = (string)(System.Web.HttpContext.Current.Session["Connection"]);
        if (String.IsNullOrEmpty(connection_string))
        {
            dbContext = new WebApiLabDbEntities();
        }
        else
        {
            dbContext = new WebApiLabDbEntities(connection_string);
        }


    }

}
但是在webapi项目中,我无法在会话对象(如session[“connection”])中设置连接字符串


那么,实现同样目标的替代方法是什么呢?web api将使用基于令牌的身份验证,而身份验证令牌决定要使用的连接字符串。

如果您的连接字符串取决于经过身份验证的用户,那么您应该基于当前用户声明应用您的逻辑(例如,将
Thread.CurrentPrincipal用作ClaimsPrincipal
并读取已发布的声明)

当然,这意味着您应该发布一个声明,使您的标识知道不同的连接字符串


这是一个讨论会主题,很大程度上取决于您在幕后使用何种身份验证、授权和身份框架,但这篇文章可能会引导您走向正确的方向:

如果您的连接字符串取决于经过身份验证的用户,那么您应该根据当前的用户声明应用您的逻辑(例如,使用
Thread.CurrentPrincipal作为ClaimsPrincipal
并读取已发布的索赔)

当然,这意味着您应该发布一个声明,使您的标识知道不同的连接字符串


这是一个讨论会主题,很大程度上取决于您在幕后使用的是什么样的身份验证、授权和身份框架,但这篇文章可能会引导您走向正确的方向:

听起来您想要的是在WebAPI中使用会话。这是可能的。以这个为例,我计划阅读access\u令牌和ba基于它构造连接\字符串并将其保留在某个位置,如会话或追加到请求[不知道是否可能]然后从会话或请求对象进行访问听起来你想要的是在WebAPI中使用会话。这是可能的。以这个为例,我计划读取access\u令牌,并基于它构造连接\u字符串,并将其保留在某个位置,如会话或追加到请求[不知道是否可能]然后从会话或请求对象进行访问