2011-08-26 69 views
2

我有一個ASP.NET MVC 3應用程序與買方和賣方功能。買方和賣方的「安全」數據庫是分開的,每個數據庫都有不同的會員供應商(有不同的要求)。 MVC應用程序分爲幾個區域,一個用於買方,另一個用於賣方(增加一些常見的東西)。現在一切正常,因爲我有不同的買家和賣家登錄屏幕。需求發生了變化,因此我需要爲買方和賣方使用相同的登錄屏幕(並重置密碼屏幕)。ASP.NET MVC - 重定向到正確的會員供應商

理想我想的過程流程如下:

  • 買方或賣方進入他們的電子郵件地址和密碼
  • 在形式提交共同控制器動作叫
  • 行動調用邏輯看買家表。如果該電子郵件地址存在,重定向買方帳戶控制
  • 否則登錄動作,如果電子郵件地址存在於賣家表,重定向到登錄的賣家賬戶控制器

行動理論上,這應該能正常運行。但是,我知道使用POST請求重定向到其他操作是不可能的。

我想知道的是:

  1. 有什麼理由不改變我的買家/賣家的登錄操作,即可使用GET而不是POST因爲它們不會被其他地方在我的代碼叫什麼名字?這似乎是一個黑客,但我不知道爲什麼...
  2. 你能想到一個更好的方式來實現我想實現的目標嗎?

由於提前,

JP

回答

1

你應該有一個單一的LoginController。它只能有一個Authorize(string email, string password)操作。你在哪裏做的「拆分」是通過創建一個MembershipProviderFactory(或任何你想命名它),返回一個IMembershipProvider接口到你的控制器。工廠可以通過查詢數據庫返回正確類型的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"); 
    } 
    } 
} 
+0

不錯,簡單 - 工作的一種享受。謝謝! –