2013-02-27 4 views
27

ImageResizer (ImageResizing dot net에서)를 사용하고 싶습니다. NuGet을 통해 MVC 용 ImageResizer를 설치했습니다. 하지만 예제에서 다음 코드를 사용하여 갈 때 :HttpContext.Current가 MVC 4 프로젝트에서 해결되지 않음

//Loop through each uploaded file 
foreach (string fileKey in HttpContext.Current.Request.Files.Keys) 
{ 
    HttpPostedFile file = HttpContext.Current.Request.Files[fileKey]; 
    if (file.ContentLength <= 0) continue; //Skip unused file controls. 

    //The resizing settings can specify any of 30 commands.. See http://imageresizing.net for details. 
    //Destination paths can have variables like <guid> and <ext>, or 
    //even a santizied version of the original filename, like <filename:A-Za-z0-9> 
    ImageResizer.ImageJob i = new ImageResizer.ImageJob(file, "~/uploads/<guid>.<ext>", new ImageResizer.ResizeSettings(
          "width=2000;height=2000;format=jpg;mode=max")); 
    i.CreateParentDirectory = true; //Auto-create the uploads directory. 
    i.Build(); 
} 

는 "HttpContext.Current.Request.Files.Keys을"foreach 문에서 해결되지 않는 이유는 무엇입니까? 내 사용법이 정확하고 Visual Studio는 "해결"옵션을 제공하지 않습니다. 내가 System.Web.HttpContext.Current을하려고하면

+0

HttpContext.Current가 아무 것도 설정되어 있지 않습니까 ("해결"됩니까?), 아니면 HttpContext.Current.Request.Files.Keys 만 표시되지 않습니까? 컨트롤러 또는 다른 클래스의 코드입니까? 이것이 다른 클래스의 메소드에서 온 것이라면 HttpContext.Current를 어떻게 든 전달해야합니다. 호출하는 메서드의 매개 변수로 사용하거나 메서드를 호출하기 전에이 값을 사용하는 public 멤버 (HttpContext 형식)가 있어야합니다. – Floremin

+0

HttpContext.Current가 응용 프로그램에서 전역이 아닙니다. 요청을 처리하는 동작 및보기에 설정되지만 요청주기 (모델, 유틸리티 클래스 등) 외부에는 존재하지 않습니다. 거기에 필요하다면, 당신은 @Floremin이 말했듯이, 그것이 존재하는 동작이나 뷰로부터 전달해야합니다. –

+0

OK - 예, 내 컨트롤러의 작업 내에 있습니다. HttpContext는 해석하지만 Current는 분석하지 않습니다. 정적 Current없이 HttpContext.Request.Files 찾을 및이 잘 작동하는 것. 왜 정적 전류가 거기에 없으며 컨트롤러 "컨텍스트"에서 액세스 할 수 없는지 확실하지 않습니까? 잘하면 정적을 사용하지 않는 것이 "누락"되지 않았기 바랍니다. 감사! – Nick

답변

39

Controller 클래스에는 HttpContext (http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext.aspx 참조)이라는 공용 속성이 있습니다.

컨트롤러에서 아무런 자격없이 사용하려고 시도하면 로컬 속성으로 해석되고 System.Web.HttpContext이 아니라는 것을 의미합니다. 속성의 유형은 System.Web.HttpContext에서 얻을 것이다으로이 같은 클래스하지 않습니다 참고하지만 당신은 (원하는 것을 할 것 Request 속성을 가지고 HttpContextBase입니다.

88

는 현재가, System.Web.

를 앞에 시도,하지만 난 HttpContext.Current를하려고하면, 그것은 '현재'인식하지 못합니다. 나는 내 사용 문장에 System.Web을 가지고 있지만, 여전히 'Current'에 접근하기 위해서는 그것을 지정해야 할 필요가있는 것처럼 보입니다.

+1

@Chris는 using 문에 System.Web을 포함시킨 경우에도 HttpContext에 System.Web을 접두어로 사용해야하는 이유에 대해 대답했습니다. 컨트롤러에 이미 HttpContext 속성이 있고 System.Web없이 사용하는 경우에는 현재없는 로컬 속성을 참조하기 때문입니다. – Niraj

2

아주 간단한 추가 라이브러리

using System.Web; 

context.Response -> HttpContext.Current.Response 

교체는

context -> HttpContext.Current 
수단

그리고 문제가 해결되었습니다.

관련 문제