gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:13:07 25 4
gpt4 key购买 nike

我有一个具有买方和卖方功能的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com