2013-05-12 2 views
5

내가 이런 계정 컨트롤러 필터 디렉토리에 InitializeSimpleMembershipAttribute를 생성하고 생성 기본 ASP.NET MVC4 웹 응용 프로그램 템플릿 및 Visual Studio를 사용 :WebAPI에서 class 속성이 작동하지 않는 이유는 무엇입니까?

[Authorize] 
[InitializeSimpleMembership] 
public class AccountController : Controller 
{ 
/* Some Default Actions like Login, LogOff, Register, ...*/ 
} 

을하고 난 AccountController WebAPI를 만들려고, 내 코드는 다음과 같습니다

지금
[Authorize] 
[InitializeSimpleMembership] 
public class APIAccountController : ApiController 
{ 
    [System.Web.Http.AcceptVerbs("GET", "POST")] 
    [System.Web.Http.HttpGet] 
    [System.Web.Http.HttpPost] 
    [System.Web.Http.AllowAnonymous] 
    [System.Web.Mvc.ValidateAntiForgeryToken] 
    public string Login(string UserName, string Password, bool RememberMe) 
    { 
     if (WebSecurity.Login(UserName, Password, persistCookie: RememberMe)) 
     { 
      return "OK"; 
     } 

     return "Failed"; 
    } 
} 

, 나는이 라인에서의 휴식 API를 호출 :

경우 (WebSecurity.Login (사용자 이름, 암호, 당 systCookie : RememberMe))

및 : "WebSecurity"클래스의 다른 메서드를 호출하기 전에 "WebSecurity.InitializeDatabaseConnection"메서드를 호출해야합니다.

난 InitializeSimpleMembershipAttribute에 달려가 webapi 컨트롤러는 컨트롤러와 동일하다.

왜 특성이 WebAPI에서 실행되지 않습니까? 웹 API에 대한 System.Web.Mvc.ActionFilterAttribute

액션 필터에서

답변

4

[InitializeSimpleMembership] -attribute 상속은 System.Web.Http.Filters.ActionFilterAttribute에서 상속 할 필요가 있기 때문에 필터는 실제로 웹 API 컨트롤러에서 실행지고 있지 않습니다. 이에 대한 global.asax

private static SimpleMembershipInitializer _initializer; 
private static object _initializerLock = new object(); 
private static bool _isInitialized; 

protected void Application_Start() 
{ 
    // Ensure ASP.NET Simple Membership is initialized only once per app start 
LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); 
} 

에 다음 코드를 추가 System.Web.Http.Filters.ActionFilterAttribute

  • 에서 상속,

    • 을 어느 자신의 필터를 구현합니다

      두 가지있다 당신이 할 수있는 로직을 InitializeMembership에서 별도의 클래스로 이동해야합니다. global.asax에서 액세스 할 수 있는지 확인하십시오.

  • 관련 문제