2010-04-03 4 views
0

인 경우이 컨텍스트에서는 응답을 사용할 수 없습니다. 안녕하세요, 사용자로부터받은 매개 변수를 기준으로 쿠키를 만들 클래스를 정의했습니다. 컨텍스트에 쿠키를 추가하려면 예외가 발생합니다.생성 쿠키가

내 클래스

public static class ManageCookies 
{  
    public static void Create(string name, string value) 
    { 
     HttpCookie cookie = new HttpCookie(name); 
     cookie.Value = value; 
     cookie.Expires = DateTime.Now.AddYears(1); 
     HttpContext.Current.Response.Cookies.Add(cookie); 
    } 

}

가 발생하였습니다 예외 : 응답이 컨텍스트에서 사용할 수 없습니다.


난이 실행되어 현재의 서브 내의 컨텍스트 접속 알고있다. 내 함수가 현재 HttpResponse를 매개 변수로 전달할 것을 제안합니다.

public static class ManageCookies 
{  
    public static void Create(string name, string value, HttpResponse response) 
    { 
     HttpCookie cookie = new HttpCookie(name); 
     cookie.Value = value; 
     cookie.Expires = DateTime.Now.AddYears(1); 
     response.Cookies.Add(cookie); 
    } 
    public static void PrePareForApplicationStart() 
    { 
     Create("somecookie", "somevalue", _context); 
    } 
} 

올바른 방법입니까? 왜? 너 또 다른 방법이있어?

업데이트 : Oppps! 이 방법을 사용하면 여전히 First Exception! ((내가 정의 클래스에있는 HttpContext 개체를 보낼 수 위의 코드를 사용

ManageCookies manager = new ManageCookies(this.Context); 
     manager.PrePareForApplicationStart(); 

주세요 그것을 위해 Application_Start 이벤트에서 호출 다음과 같이 업데이트

와의 manageCookies 클래스 :.. 내가 사용

public class ManageCookies 
{ 
    private HttpContext _context; 
    public ManageCookies(HttpContext context) 
    { 
     this._context = context; 
    } 
} 

을 이 변수 (_context)에서 쿠키를 추가하는 중!

답변

2

제공 한 코드는 문제가없는 곳에서 전화를 걸 수 있습니다. 응답을 플러시 또는 fr 후에 호출하면 톰 요청을 처리하는 데 할당 아닌 다른 스레드 - 당신은 설명을 사데에 대한 응답으로 문제

의 모든 종류를 얻을 수 있습니다 :

이 정확하게 포인트입니다. 응용 프로그램 시작은 응용 프로그램 수명 동안 한 번만 발생합니다. 그리고 나는이 쿠키가 모든 응답의 일부로 전달되기를 원합니다. 다시 말해서 ApplicationStart에서는 올바른 작업을 수행 할 수 없습니다. PreRender가 끝나기 전에 페이지 수명주기 동안 언제든지 할 수 있습니다.

+0

예, ApplicationStart 이벤트에서이 메서드를 사용하는 것이 한 가지 예입니다. PrePareForApplicationStart 메소드를 호출하여 첫 ​​번째 애플리케이션 실행에 필요한 쿠키를 생성하고 싶습니다. 내 문제는 방법 (만들기) 위에 있습니다! 고마워 사랑하는 mfeingold – Sadegh

관련 문제