1

ASP.Net MVC アプリで SimpleMembership を機能させようとしています。承認が必要なすべてのコントローラーは、SecureController という基本クラスを拡張します。

[Authorize]
[InitializeSimpleMembership]
[HandleException]
public class SecureController : Controller
{
    protected UserProfile CurrentUser;

    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);

        var currentuserid = WebSecurity.CurrentUserId;
        var context = new UsersContext();
        CurrentUser = context.UserProfiles.SingleOrDefault(u => u.AuthenticationId == currentuserid);

        if (CurrentUser != null)
        {
            ViewBag.UserName = CurrentUser.Name;
            ViewBag.UserId = CurrentUser.Id;
        }               
    }
}

「「WebSecurity」クラスの他のメソッドを呼び出す前に、「WebSecurity.InitializeDatabaseConnection」メソッドを呼び出す必要があります。この呼び出しは、サイトのルートにある _AppStart.cshtml ファイルに配置する必要があります。WebSecurity.CurrentUserId を呼び出そうとするとエラー メッセージが表示されます。InitializeSimpleMembershipAttribute の OnActionExecuting にブレークポイントを設定しましたが、ブレークポイントがヒットしません。InitializeSimpleMembership が無視されているようです。

FilterConfig にも InitializeSimpleMembershipAttribute への呼び出しを追加しました。FilterConfig.RegisterGlobalFilters は Global.asax から呼び出されますが、これも役に立ちませんでした。

何か案は?

4

1 に答える 1

3

Application_Start()Global.asax.cx に直接呼び出しを配置し​​ます

protected void Application_Start()
{
    WebSecurity.InitializeDatabaseConnection("MembershipContext", 
        "WebUsers", "Id", "UserName", autoCreateTables: true);

    // Other stuff from the template like AreaRegistration.RegisterAllAreas()
    // etc.
}

それはうまくいきます。

オンラインで見つけた例では、その呼び出しを のコンストラクターに入れる傾向がありますSimpleMembershipInitializer()。私の全体的なアプリケーションのコンテキストでは、それはうまくいきませんでした (問題が何であったかを正確に思い出すことはできませんが)。

于 2013-03-28T15:45:48.770 に答える