c# - ASP.NET MVC - 重定向到正确的成员资格提供者

标签 c# asp.net-mvc asp.net-mvc-3 asp.net-membership

我有一个具有买方和卖方功能的 ASP.NET MVC 3 应用程序。买方和卖方的“安全”数据库是分开的,每个数据库都有不同的成员(member)资格提供商(具有不同的要求)。 MVC 应用程序被分成多个区域,一个用于买家,一个用于卖家(添加了一些常用内容)。现在一切正常,因为我有不同的买家和卖家登录屏幕。要求已更改,我需要为买家和卖家使用相同的登录屏幕(和重置密码屏幕)。

理想情况下,我希望流程如下所示:

  • 买家或卖家输入他们的电子邮件地址和密码
  • 在提交表单时调用通用 Controller 操作
  • 操作调用逻辑来查看买家表。如果存在此电子邮件地址,则重定向到买家帐户 Controller 中的登录操作
  • 否则,如果电子邮件地址存在于卖家表中,则重定向到卖家帐户 Controller 中的登录操作

理论上这应该可以正常工作。但是,我知道无法使用 POST 请求重定向到另一个操作。

我想知道的是:

  1. 是否有任何理由不将我的买家/卖家登录操作更改为使用 GET 而不是 POST,因为它们不会在我的代码中的其他任何地方调用?这似乎是一个 hack,但我不知道为什么......
  2. 你能想出更好的方法来实现我想要实现的目标吗?

提前致谢

日本

最佳答案

您应该有一个 LoginController。它可以只有一个 Authorize(string email, string password) 操作。您执行“拆分”的地方是创建一个 MembershipProviderFactory(或您想要命名的任何名称),它向您的 Controller 返回一个 IMembershipProvider 接口(interface)。工厂可以通过查询数据库返回正确类型的 MembershipProvider

public class SellerMembershipProvider : IMembershipProvider
{
  public bool Authorize(string email, string password)
  {
    // validate seller
  }
}

public class BuyerMembershipProvider : IMembershipProvider
{
  public bool Authorize(string email, string, password)
  {
    // validate buyer
  }
}

public class MembershipProviderFactory
{
  public IMembershipProvider Create(string email)
  {
     if(/* email is in seller database*/)
     {
       return new SellerMembershipProvider();
     }
     else
     {
       return new BuyerMembershipProvider();
     }
  }
}

public class LoginController : Controller
{

  private readonly MembershipProviderFactory _providerFactory = new MembershipProviderFactory();
  public ActionResult Authenticate(string email, string password)
  {

    IMembershipProvider provider = _providerFactory.Create(email);
    if(provider.Authorize(email, password))
    {
    return View("MyAccount");
    }
    else
    {
        return View("Login");
    }
  }
}

关于c# - ASP.NET MVC - 重定向到正确的成员资格提供者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199058/

相关文章:

asp.net-mvc-3 - Web 表单(iframe)内 MVC 应用程序的身份验证

asp.net-mvc-3 - 在 razor 中使用 @if 时出现错误

c# - 蒙版文本框输入左对齐

c# - WinRT 的 TcpListener 类在哪里?

c# - 如何在 C# 中创建子类?

javascript - asp.net mvc - 如何在 javascript 中循环访问模型数据

asp.net-mvc-3 - .NET MVC 3 输出缓存 Html.Action()

C# 计算重复数字

javascript - 在foreach循环中解析jquery中的json数组

asp.net-mvc - 在 ASP.NET MVC 中使用多个部分处理复杂 View 中的模型状态和验证