2013-04-17 5 views
1

컨트롤러 개체에서 요청 개체에 액세스하려는 경우 HttpContext.Request을 작성해야하지만 MVC보기에서 동일한 개체에 액세스하려면 HttpContext.Current.Request을 작성해야합니다. 그들 사이에 차이가 있습니까? 내가 직면 한 문제는 콘트롤러 액션에서 HttpContext.Response.Cookies.Add을 통해 설정 한 쿠키가 MVC 뷰의 HttpContext.Current.Request.Cookies 컬렉션에서 검색되지 않는다는 것입니다. 자바 스크립트를 통해 해당 쿠키를 볼 수는 있지만. 당신이 쓰는 컨트롤러 유형 HttpContextBase이다 HttpContext라는 속성을 가지고있는 추상 클래스 Controller을 상속하기 때문에HttpContext.Current.Request와 HttpContext.Request 사이에 차이가 있습니까?

답변

2

당신이보기에 컨트롤러 HttpContext.RequestHttpContext.Current.Request를 작성해야하는 이유입니다. 그런 다음 뷰는 현재 요청에 대한 httpcontext 객체를 제공하는 봉인 된 클래스 HttpContext을 사용합니다.

그들간에 차이가 있습니까?

아니요. 둘 다 현재 요청에 대해 동일한 HttpRequest 개체를 제공합니다.

+0

좋아, 내가 직면하는 문제는, 나는 컨트롤러 동작에서 쿠키를 설정하고 MVC보기에서 읽기를 원하지만 값이 표시되지 않습니다. 그러나, 내가 같은보기의 자바 스크립트에서 그것을 읽으려고하면, 그것은 가치를 보여주고있다. 무엇이 해결책일까요? – Nirman

+0

그래서 만약 당신이 :'Response.Cookies.Add (새로운 HttpCookie ("cookie_monster", "six-eyed"));'를 컨트롤러에 넣고 @

@ HttpContext.Current.Request.Cookies [ "cookie_monster"] .Value

'아무것도 보이지 않습니까? 그런 식으로 사용하고 있습니까? 말이되지 않습니다. –

0

내가 틀린 경우를 제외하고는 응답에 쿠키를 씁니다. 그러나 다음 요청이있을 때까지 요청에 해당 쿠키를 사용할 수 없습니다 (즉, 동일한 또는 새 페이지를 다시로드해야만 그것을 쿠키 읽기). 쿠키는 컨트롤러와 뷰간에 정보를 공유하는 좋은 방법이 아니므로 ViewData 또는 ViewBag를 사용해야합니다.

또한 이미 출력 한 후에 쿠키에 쓰지 않아야합니다. 이는 Response.Write을 권장하지 않는 이유 중 하나입니다.

자바 스크립트가 작동하는 이유는 서버가 아닌 클라이언트에서 쿠키를 읽는 것입니다.

관련 문제