2009-08-31 6 views
4

요청한 모든 페이지에 대해 쿠키를 확인하거나 쿠키가없는 경우 만들어야합니다. 쿠키가있는 경우 해당 쿠키의 내용을 기반으로 DB에서 일부 정보를로드해야합니다.asp.net mvc가 기본 컨트롤러의 쿠키 데이터에 액세스 할 수 없음

이렇게하려면 다른 컨트롤러가 상속하는 AppController라는 기본 컨트롤러를 만들었습니다.

:

public MySession CurrentSessionValues; 
    public ApplicationController() 
    { 
     if (Request.Cookies["MySiteCookie"] == null) 
     { 
      // create new Record in DB 
      CurrentSessionValues = CreateMySession(); 
      HttpCookie cookie = new HttpCookie("MySiteCookie"); 
      cookie.Value = CurrentSessionValues.SessionID.ToString; 
      Response.SetCookie(cookie); 
     } 
     else 
     { 
      // use the value in MySiteCookie to get values from the DB 
      // e.g. logged in user id, cart id, etc 
     } 

    } 

내가 이것을 실행하면, 나는 default.aspx에이 오류가 발생합니다 :합니다 (CurrentSessionValues ​​개체 것을 내 모든 컨트롤러에 사용할 수 있도록)

는이 같은 뭔가를

컨트롤러 'Mvc_Learn.Controllers.HomeController'유형 컨트롤러를 만드는 동안 오류가 발생했습니다.

컨트롤러에 컨트롤러 팩토리가 없으면 매개 변수가없는 public 생성자 이 있는지 확인하십시오.

그것은 Request.Cookies에 휴식 [ "MySiteCookie"]

나는 다른 방법이나 다른 장소에서이 논리 일을해야 하는가?

답변

9

트릭은 생성자에 컨텍스트가 필요 없다는 것입니다. 오히려, 당신은 초기화 메소드를 오버라이드 (override) :

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    //check request context for cookie and do your thang. 
} 

PS : 오류가 왜 후손을 위해, 내가주의해야한다. 예외 정보의 핵심 부분은 컨트롤러를 생성하는 동안 오류가 발생했으며, 매개 변수가없는 생성자 비트는이 경우 빨간색 청어입니다. 발생한 오류는 HttpContext에 대한 null 참조 예외입니다.

+1

감사합니다. 사용하고 있습니다 : requestContext.HttpContext.Request.Cookies [ "MysiteCookie"] – Nils

0

HomeController에 매개 변수없는 공용 생성자가 있는지 확인하고 상위 생성자 ApplicationController()이 호출되는지 확인하십시오.

관련 문제