【问题标题】:How do I redirect someone from one action to another in ASP.NET MVC when an action has completed?当一个动作完成时,如何在 ASP.NET MVC 中将某人从一个动作重定向到另一个动作?
【发布时间】:2013-01-16 18:04:13
【问题描述】:

在我的网络应用程序(正在进行中)中,我现在尝试让新客户注册到我的网络应用程序。我在 Azure 中部署。

我正在研究的想法:

www.[mysite].com/Register

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

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

在上面的 sn-p 中,我检查租户是否存在,如果不存在,则重定向到新客户。

    [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") 会很棒,但当然不存在。我用谷歌搜索了一下,但没有找到有用的链接(这主要是我认为我在设计“错误的东西”的原因)。

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

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

【问题讨论】:

  • 你的第二个问题是合适的;如果您显示一些代码并扩展您所拥有的。第一个问题不适合 Stack Overflow。
  • 再一次,“建议”和“不良做法与良好做法”不是要在 Stack Overflow 上提出的问题类型。只是为了不关闭,我建议编辑它并将您的问题缩小到您面临的实际技术问题。
  • 对不起,我没有意识到这一点。恐怕我们都编辑了这篇文章(或者至少有人编辑了)。希望我没有撤消更改。我现在专门寻求技术帮助,并祈祷有经验的人仍然会告诉我我是否在做一些倒退

标签: c# asp.net asp.net-mvc azure


【解决方案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]/

【讨论】:

  • 我认为这让我朝着正确的方向前进。我今晚会调查一下,然后在这里报告。我将把这个问题留到今天,也许其他人可以给我一些例子。到目前为止,谢谢!
【解决方案2】:

要完成此操作,您需要查看Domain Routing 的 ASP .NET MVC。

【讨论】:

  • 不首选仅链接的答案,因为如果链接失效,那么此答案对未来的访问者将变得无用。
  • 很有趣,正在浏览并最终找到了您已经提供的链接。 icw cname 是解决方案。抱歉迟到了,昨天看的不够仔细。
  • @Haxx 没问题,很高兴你找到了你要找的东西。
猜你喜欢
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-15
  • 2014-06-19
  • 1970-01-01
相关资源
最近更新 更多