我有一个具有买方和卖方功能的 ASP.NET MVC 3 应用程序。买方和卖方的“安全”数据库是分开的,每个数据库都有不同的成员(member)资格提供商(具有不同的要求)。 MVC 应用程序被分成多个区域,一个用于买家,一个用于卖家(添加了一些常用内容)。现在一切正常,因为我有不同的买家和卖家登录屏幕。要求已更改,我需要为买家和卖家使用相同的登录屏幕(和重置密码屏幕)。
理想情况下,我希望流程如下所示:
- 买家或卖家输入他们的电子邮件地址和密码
- 在提交表单时调用通用 Controller 操作
- 操作调用逻辑来查看买家表。如果存在此电子邮件地址,则重定向到买家帐户 Controller 中的登录操作
- 否则,如果电子邮件地址存在于卖家表中,则重定向到卖家帐户 Controller 中的登录操作
理论上这应该可以正常工作。但是,我知道无法使用 POST 请求重定向到另一个操作。
我想知道的是:
- 是否有任何理由不将我的买家/卖家登录操作更改为使用 GET 而不是 POST,因为它们不会在我的代码中的其他任何地方调用?这似乎是一个 hack,但我不知道为什么......
- 你能想出更好的方法来实现我想要实现的目标吗?
提前致谢
日本
最佳答案
您应该有一个 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/