2013-05-21 86 views
0

我有開箱即用的Simple Membership機制的MVC 4應用程序。最近我發現每次我調用InitializeSimpleMembershipAttribute過濾器中的應用程序OnActionExecuting方法中的任何控制器都會執行!儘管我已經註釋掉InitializeSimpleMembership屬性帳戶控制器上,像這樣:InitializeSimpleMembership過濾器問題

[Authorize] 
//[InitializeSimpleMembership] 
public class AccountController : Controller 
{ 

過濾器還是會被稱爲!這個電話來自哪裏?

回答

1

我通常會刪除該文件InitializeSimpleMembership這是在默認情況下,過濾器的文件夾。你希望它在啓動時初始化一次,所以最好的地方是Global.asax

現在要在Global.asax中保持application_start()方法的結構一致,我將它添加到被調用的配置文件中通過該方法。你可以創建一個新的,但我通常只是將它添加到AuthConfig。 AuthConfig具有默認的OAuth代碼,因此將所有認證方法放在一起是有意義的。

調用RegisterAuth中的方法在啓動時由global.asax調用一次。只需添加

//Local Authentication 
      WebSecurity.InitializeDatabaseConnection("MyDbConnection", "UserProfile", "UserId", "UserName", autoCreateTables: false); 

你將不得不通過去除using語句引用該過濾器的文件夾上解決建幾個錯誤(也許只有如果你有ReSharper的),並刪除InitializeSimpleMembership屬性(它不再需要)。

在我的例子中,我的autoCreateTables爲false,因爲我在我的解決方案中使用了數據庫項目。如果您使用另一種方法(如代碼優先),則可能需要將其設爲true

1

你應該檢查_AppStart.cshtml文件,如果有的話。或者搜索初始化成員資格的代碼。這可能是這樣的:

if (!WebSecurity.Initialized) 
{ 
    WebSecurity.InitializeDatabaseConnection("UserConnectionString", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
}