[asp.net-mvc] HttpRequestBase를 HttpRequest 객체로 어떻게 변환합니까?

내 ASP.NET MVC 컨트롤러 안에 HttpRequest개체 가 필요한 메서드가 있습니다. 내가 접근 할 수있는 것은 HttpRequestBase객체뿐입니다.

어쨌든 내가 어떻게 든 이것을 변환 할 수 있습니까?

무엇을 할 수 있고 /해야합니까 ??



답변

그것은 당신의 방법입니까, 그래서 그것을 다시 쓸 수 HttpRequestBase있습니까? 그렇지 않은 경우 항상 전류 HttpRequest를 가져와 HttpContext.Current.HttpRequest전달할 수 있습니다. 그러나 ASP.NET : 더 나은 단위 테스트 지원을 위해 System.Web 종속성 제거에 언급 된 것과 같이 클래스 내에서 HttpContext에 대한 액세스를 종종 래핑합니다 .


답변

테스트가 불가능한 구체적인 버전 (typemock 또는 다른 마술없이)과는 반대로 항상 애플리케이션에서 HttpRequestBase 및 HttpResponseBase를 사용해야합니다.

HttpRequestWrapper 클래스를 사용하여 아래와 같이 변환하면됩니다.

var httpRequestBase = new HttpRequestWrapper(Context.Request);


답변

그냥 사용할 수 있습니다

System.Web.HttpContext.Current.Request

여기서 핵심은 “올바른”HttpContext를 얻기 위해 전체 네임 스페이스가 필요하다는 것입니다.

이 질문을받은 지 4 년이 지났다는 것을 알고 있지만 이것이 누군가에게 도움이된다면 여기 있습니다!

(편집 : Kevin Hakanson이 이미이 답변을 주었다는 것을 알고 있습니다 … 그러면 내 답변이 댓글이 아닌 답변을 읽는 사람들에게 도움이되기를 바랍니다.) 🙂


답변

HttpRequestBase를 사용하여 HttpRequestWrapper를 사용 / 생성 해보십시오.


답변

ASP.NET MVC4 .NET 4.5에서 HttpRequest를 얻으려면 다음을 수행 할 수 있습니다.

this.HttpContext.ApplicationInstance.Context.Request


답변

일반적으로 HttpContext컨트롤러 작업에서 속성에 액세스해야 할 때 더 나은 디자인 방식으로 수행 할 수있는 작업이 있습니다.

예를 들어 현재 사용자에 액세스해야하는 경우 테스트 할 때 원하는대로 및 mock으로 IPrincipal채울 유형의 매개 변수를 작업 메서드에 제공합니다 Attribute. 방법에 대한 간단한 예는 이 블로그 게시물 , 특히 7 번을 참조하십시오 .


답변

이러한 유형간에 변환 할 수있는 방법은 없습니다.

비슷한 경우가있었습니다. 클래스 / 웹 서비스 메서드를 다시 작성하여 “Base”접미사 (HttpContext, … HttpSessionState)가없는 닫기 이름 유형 대신 HttpContextBase, HttpApplicationStateBase, HttpServerUtilityBase, HttpSessionStateBase …를 사용합니다. 집에서 만든 조롱으로 처리하기가 훨씬 쉽습니다.

못해서 미안해.