我如何重定向某人从一个动作到另一个在ASP.当一个动作完成时.NET MVC



在我的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();
    }

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

    [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);
    }

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

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

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

建议太棒了!事先感谢您的关照!

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

这只是我的两分钱,如果有错,请指正。

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

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

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

要做到这一点,您需要查看asp.net MVC的域路由。

相关内容

最新更新