2013-02-27 2 views
27

Я хочу использовать ImageResizer (из ImageResizing dot net). Я установил ImageResizer для MVC через NuGet. Но когда я иду использовать следующий код из примера:HttpContext.Current not Resolving in MVC 4 Project

//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» в Еогеаспе не разделяющий? У меня правильные настройки, и Visual Studio не предлагает никаких параметров «Разрешить».

+0

Является ли HttpContext.Current установленным для чего угодно (он «разрешает»), или вы не видите только HttpContext.Current.Request.Files.Keys? Является ли этот код вашим контроллером или другим классом? Если это из метода в другом классе, убедитесь, что вы каким-то образом передали ему HttpContext.Current. Или в качестве параметра для метода, который вы вызываете, или с открытым членом (типа HttpContext), который должен принять это значение до вызова метода. – Floremin

+0

HttpContext.Current не является глобальным для вашего приложения. Он задается в действиях и представлениях, которые обслуживают запрос, но вне цикла запроса (например, модели, служебные классы и т. Д.) Он не существует. Если вам это нужно, вы должны передать его из действия или представления, где оно существует, как говорит @Floremin. –

+0

OK - Да, это в действии в моем контроллере. HttpContext разрешает, но не текущий. Я нахожу HttpContext.Request.Files без статического тока, и это, похоже, работает нормально. Не знаете, почему статический ток не существует, возможно, недоступен из контекста контроллера? Надеюсь, я не «пропустил» что-нибудь, не используя статику. Благодаря! – Nick

ответ

39

Проблема в том, что класс Controller имеет общественное имущество под названием HttpContext (см. http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext.aspx).

Это означает, что при попытке использовать его без какой-либо квалификации в контроллере он разрешает локальное свойство, а не System.Web.HttpContext. Тип собственности HttpContextBase который действительно имеет Request свойство, которое будет делать то, что вы хотите (хотя заметим, что это не тот же класс, как вы могли бы получить от System.Web.HttpContext.

88

Попробуйте предваряя его с System.Web.

Если я пытаюсь System.Web.HttpContext.Current, то ток есть, но если я пытаюсь HttpContext.Current, то он не признает «Current». У меня есть System.Web в моих операциях using, но мне все же кажется, что требуется указать его, чтобы получить доступ к «Current».

+1

@ Крис ответил на это, почему вы должны префикс HttpContext с помощью System.Web, даже если вы включили System.Web в свои операторы. потому что у контроллера уже есть свойство HttpContext, и если вы используете без System.Web, оно ссылается на его локальное свойство, которое не имеет тока. – Niraj

2

Очень просто добавить библиотека

using System.Web; 

и заменить

context.Response -> HttpContext.Current.Response 

означает

context -> HttpContext.Current 

и ваша проблема решена.