ASP.NET MVC多用户应用程序中的控制器(没有子域)

时间:2013-07-09 15:30:49

标签: asp.net-mvc controller multi-tenant

我已经阅读了几篇关于如何为多租户应用程序使用子域和自定义路由的文章,但我正在处理的项目只需要一个域。我们使用默认会员提供商,并将加密的租户ID存储在cookie中。

我的问题是关于控制器。我们当前正在构建它们,以便每个操作中的第一个项从cookie中检索TenantID,然后将其传递到每个Linq查询中。将它移动到控制器类的顶部是否安全,因此每个控制器实例只发生一次?或者,如果多个用户访问同一个控制器,这是否会导致潜在的数据交叉?

我发现this article表明这是可能的,但我想确定。

例如,这是当前的系统:

public class ThisController : Controller
{
    private DBContext db = new ThisContext();

    public ActionResult Index() 
    {
        long tenantid = AuthUser.GetTenantID();
...  

这是我们正在考虑的事情:

public class ThisController : Controller
{
    private DBContext db = new ThisContext();

    private Int64 tenantid = AuthUser.GetTenantID();

    public ActionResult Index()
    {
...

我对默认行为的理解是每个请求都会创建一个控制器类的新实例,但我想在继续操作之前确保它是正确的。

1 个答案:

答案 0 :(得分:1)

是的,对于mvc应用程序的每个请求,默认情况下都会创建新的控制器实例。您可以通过向控制器添加构造函数并在构造函数中执行Debug.WriteLine来自行测试。