0

在我的 webapp(正在进行中)中,我现在尝试让新客户注册到我的 webapp。我在 Azure 中部署。

我正在研究的想法:

www.[mysite].com/Register

该注册页面允许“新”用户注册他的新租户。

客户。[mysite].com/Register

这在代码中几乎如下所示

    public ActionResult Register()
    {
        var url = Request.ServerVariables["HTTP_HOST"];
        var tenantNameParser = new TenantNameParser(url);

        if (!TenantRepository.Exists(tenantNameParser.TenantName))
        {
            return RedirectToAction("NewCustomer");
        }

        return View();
    }

在上面的代码片段中,我检查租户是否存在,如果不存在,则重定向到新客户。

    [HttpPost]
    public ActionResult NewCustomer(Customer model)
    {
        if (ModelState.IsValid)
        {
            var tenant = new Tenant
                {
                    Name = model.TenantName,
                    Guid = Guid.NewGuid().ToString()
                };

            TenantRepository.Add(tenant);
            // TODO create a new user new tenant repository to do this stuff as 1 atomic action

            if (!UserRepository.Exists(model.AccountableEmailAddress))
            {
                // Attempt to register the user
                var createStatus = MembershipService.CreateUser(
                    model.AccountableUser,
                    model.Password,
                    model.AccountableEmailAddress);

                if (createStatus == MembershipCreateStatus.Success)
                {
                    FormsService.SignIn(model.AccountableUser, false);
                    return RedirectToAction("Index", "Home");
                }

                throw new Exception("crappy implemenation, improve");
            }
            FormsService.SignIn(model.AccountableUser, false);

            // TODO figure out how to redirect to tenant.site.com
            return RedirectToAction("Index", "Home");
        }

        return View(model);
    }

上面的代码创建了一个新客户,最后我的 //todo 就是这个问题的内容。如何以tenant.domain.com 的形式重定向到包含实际租户的URL?

我不知道这种“处理租户的方式”是否是一种不好的做法,如果是,请随意说。

问题:如何重定向到租户 URL ([tenantname.[mysite].com/Index/Home)。像: Redirect("tenantname", "Index", "Home") 会很棒,但当然不存在。我用谷歌搜索了一下,但没有遇到有用的链接(这主要是我认为我设计“错误的东西”的原因)。

建议会很棒!非常感谢您提前考虑!

如果我因为不清楚我的要求而需要重新措辞,请告诉我。

4

2 回答 2

1

只是我的2美分,如果错了,请纠正我。

我的理解是,您无法在代码中控制 [tenant name].yoursite.com 中的租户名称,因为它超出了 ASP.NET MVC 的范围。它是域名 yoursite.com 的 CNAME。所以下面我的一些想法。

  1. 我猜你需要一个可编程的域提供者,这意味着你可以从你的代码中创建 CNAME。然后,当新客户注册时,实际 URL 可能是 yoursite.com/[租户名称]/。然后将其映射到新的 CNAME [租户名称].yoursite.com。

  2. 我不确定 URL 重写是否可以帮助您。这意味着您创建一个新规则,如果传入的 URL 是 [tenant name].yoursite.com,则将其映射到 yoursite.com/[tenant name]/

于 2013-01-17T02:09:15.300 回答
1

为此,您需要查看 ASP .NET MVC 的域路由

于 2013-01-16T18:13:00.120 回答