2012-06-10 4 views
1

모든 메서드가 쿠키를 사용할 수 있도록 생성자 메서드에서 클래스 변수로 쿠키 값을 정의하려고합니다.Asp.net MVC3 (생성자 사용)

하지만 오류 메시지 등이있어,

개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

public class OrdersController : Controller 
{ 
    string userData; 

    public orderConroller(){ 
     string cookieName = FormsAuthentication.FormsCookieName; 
      HttpCookie authCookie = Request.Cookies[cookieName]; 
     FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
      userData = authTicket.UserData; 
    } 

    public void a(){ 
     //I need Cookie 
    } 
    public void b(){ 
     //I need Cookie 
    } 
    public void c(){ 
     //I need Cookie 
    } 
    public void d(){ 
     //I need Cookie 
    } 
} 

이 문제를 어떻게 해결할 수 있습니까? @. @

감사합니다.

답변

6

아직 초기화되지 않았기 때문에 HttpContext (컨트롤러의 경우 Request 개체에 액세스하려는 경우)을 사용할 수 없습니다. 가장 먼저 액세스 할 수있는 방법은 무시할 수있는 Initialize 메서드입니다. 그래서

는 :

public class OrdersController : Controller 
{ 
    private string userData; 

    protected override void Initialize(RequestContext requestContext) 
    { 
     base.Initialize(requestContext); 
     var request = requestContext.HttpContext.Request; 
     string cookieName = FormsAuthentication.FormsCookieName; 
     HttpCookie authCookie = request.Cookies[cookieName]; 
     FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
     userData = authTicket.UserData; 
    } 

    public void a() { 
     //I need Cookie 
    } 
    public void b() { 
     //I need Cookie 
    } 
    public void c() { 
     //I need Cookie 
    } 
    public void d() { 
     //I need Cookie 
    } 
} 
+0

대단히 감사합니다! ~ –

0

나는 쿠키에 대한 필요성 인증에 관한 것입니다을 참조하십시오. 인증의 경우, 가장 좋은 방법은 사용자 정의 인증 필터를 사용하는 것입니다. 필터는 필요한 모든 정보를 사용하여 User 객체를 초기화 할 수 있습니다. 이 코드를 생성자 내부에 넣는 것보다 더 우아합니다.

0

당신은 게으른 패션에 유저 데이터를 사용할 수 있도록 할 수 있습니다

public class OrdersController : Controller 
{ 
    private string userData; 
    private string UserData { 
     get { 
      if(userData == null) { 
       var request = requestContext.HttpContext.Request; 
       string cookieName = FormsAuthentication.FormsCookieName; 
       HttpCookie authCookie = request.Cookies[cookieName]; 
       FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 
       userData = authTicket.UserData; 
      } 
      return userData; 
     } 
    } 
... 
} 

그런 다음 당신의 행동에 그냥 UserData 속성을 호출. 이 방법을 사용하면 모든 요청에서 해당 코드를 실행하지 않고 사용자 데이터가 필요한 코드에서만 실행할 수 있습니다 (필요없는 경우 모든 요청에서 해독하지 않는 것이 좋습니다).

희망이 있습니다.