1

내 ASP.Net MVC 응용 프로그램에서 SimpleMembership을 사용하려고합니다. 권한 부여 SecureController라는 기본 클래스를 확장 할 필요가 내 모든 컨트롤러 :.ASP.Net MVC 4의 SimpleMembership InitializeSimpleMembership이 호출되지 않습니다.

[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에서 호출되며이 역시 도움이되지 않습니다.

아이디어가 있으십니까?

답변

3

나는 잘 작동

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

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

Global.asax.cx

Application_Start()에 직접 전화를 걸.

온라인으로 찾은 예제는 해당 호출을 SimpleMembershipInitializer()의 생성자에 넣는 경향이 있습니다. 그게 내 전반적인 응용 프로그램의 맥락에서 나에게 도움이되지 못했다. (나는 그 문제가 정확히 무엇인지를 기억하지 못한다.)

+0

감사합니다. 나는 당신의 충고를 따라 Global.asax가 어떻게 디자인되었는지를 따라갈 Config를 만들었다. 완벽하게 작동합니다. –

관련 문제