어떻게 HttpContext.Current에서 TempData에 액세스 할 수 있습니까?HttpContext.Current에서 TempData에 액세스
답변
TempData
에 HttpContext.Current
에서 액세스 할 수 없으며 액세스해서도 안됩니다. 컨트롤러 인스턴스가 필요합니다. 불행히도 귀하의 시나리오를 설명하지 않았기 때문에 귀하는 왜 더 나은 대안을 제공 할 수 없습니까?
나는 더 친숙한/형식 안전한 방법으로 TempData를 래핑하는 클래스를 만들고 있습니다. 그것은 내부적으로 TempData를 사용하지만 그 사실을 폭로하고 싶지는 않습니다. 나는 '새로운 MyTempDataWrapper (this.TempData)'처럼 TempData를 전달하고 싶지 않습니다. TempData가 Session에 저장되고 Session에 HttpContext.Current에서 액세스 할 수있는 경우 HttpContext.Current에서 TempData에 액세스 할 수 없어야하는 이유는 무엇입니까? – BowserKingKoopa
다른 답변에 대한 귀하의 의견을 언급하면 자신의 ITempDataProvider를 구현 한 다음 Controller를 재정 의하여이를 사용하십시오. 세션이 아닌 쿠키에 tempdata를 저장하는 Mvc3Futures의 CookieTempDataProvider 클래스를 살펴보고 이것이 가능한지 확인하십시오.
http://volaresystems.com/Blog/post/2011/06/30/Sessionless-MVC-without-losing-TempData.aspx
오히려 tempdata 저장 위치를 변경하는 대신, 구현 가능한 SessionCookieTempDataProvider에서 상속 단순히 그것에 형태 보증 된 방법을 추가 할 수 있습니다.
자신의 디자인 결정으로 인해 컨텍스트 개체를 매개 변수로 전달하지 않고이 작업을 수행하려면 최소한 전역 정적 클래스에서 [ThreadStatic]을 사용할 수 있습니다. 이는 ThreadStatic 매개 변수에 의존해야하는 Property 액세스 멤버가 함수가 아니기 때문에 유용 할 수 있습니다.
ThreadStatic은 매개 변수를 전달하지 않고도 동일한 스레드의 리소스를 먼 스택 프레임에 공유 할 수 있습니다. HttpContext.Current는이를 달성하기 위해 ThreadStatic을 사용합니다.
일반 MVC 컨트롤러 클래스는이 작업을 수행하지 않습니다. 따라서 프로젝트에서 상속받을 모든 컨트롤러에 대해 클래스를 직접 생성해야합니다.
public class MyController : Controller
{
public MyController()
{
_Current = this;
}
[ThreadStatic]
public static RacerController _Current = null;
public static RacerController Current
{
get
{
var thisCurrent = _Current; //Only want to do this ThreadStatic lookup once
if (thisCurrent == null)
return null;
var httpContext = System.Web.HttpContext.Current;
if (httpContext == null) //If this is null, then we are not in a request scope - this implementation should be leak-proof.
return null;
return thisCurrent;
}
}
protected override void Dispose(bool disposing)
{
_Current = null;
base.Dispose(disposing);
}
}
사용법 :
var thisController = MyController.Current; //You should always save to local variable before using - you'll likely need to use it multiple times, and the ThreadStatic lookup isn't as efficient as a normal static field lookup.
var value = thisController.TempData["key"];
thisController.TempData["key2"] = "value2";
- 1. HttpContext.Current에서 들어오는 호스트를 잡는 방법
- 2. 비 컨트롤러 클래스에서 TempData에 추가
- 3. ViewData 용 ViewBag가있는 경우 왜 TempData에 TempBag가 없습니까?
- 4. 액세스 전송에 대한 액세스
- 5. HttpContext에서 TempData 키/값에 액세스 할 수 있습니까?
- 6. 액세스?
- 7. 액세스
- 8. 액세스
- 9. 액세스
- 10. 액세스
- 11. 액세스
- 12. 액세스
- 13. 액세스
- 14. Facebook 데이터에 액세스 - 오프라인 액세스
- 15. 데이터베이스 액세스 VS LAN 액세스
- 16. 액세스 옵션 ms 액세스 2007
- 17. MS 액세스 데이터 액세스 제한
- 18. vb.net에서 서비스를 사용하여 ms 액세스 테이블에 액세스
- 19. 페이지 액세스 토큰과 사용자 액세스 토큰의 차이점
- 20. 사용자 액세스 역할 저장/액세스 C# Winforms
- 21. 모달 형식의 액세스 및 액세스 모듈 코드
- 22. 오프라인 액세스. 액세스 토큰 확인 중?
- 23. VB NET에서 액세스 외부의 액세스 함수 호출
- 24. DSN에 액세스 할 때의 액세스 제한은 무엇입니까?
- 25. 파일 액세스 속도 대 데이터베이스 액세스 속도
- 26. 컨트롤러 /보기의 조건부 액세스/제한된 액세스? (MVC2)
- 27. 패널 액세스
- 28. 파일 액세스 /.
- 29. 액세스 쿼리
- 30. 파일 액세스
는이 문제에 대한 해결책을 찾았나요? – trailmax