2013-02-27 12 views
27

Desidero utilizzare ImageResizer (da ImageResizing dot net). Ho installato ImageResizer per MVC tramite NuGet. Ma quando vado a utilizzare il seguente codice dall'esempio:HttpContext.Current non risolvente in MVC 4 Progetto

//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(); 
} 

Il "HttpContext.Current.Request.Files.Keys" nel foreach non sta risolvendo? Ho corretto i miei usi e Visual Studio non offre opzioni "Risolvi".

+0

HttpContext.Current è impostato su qualsiasi cosa (si "risolve") oppure non si vede HttpContext.Current.Request.Files.Keys? Questo codice è del tuo controller o di un'altra classe? Se proviene da un metodo in un'altra classe, assicurati di passare HttpContext.Current in qualche modo. O come parametro per il metodo che stai chiamando o se hai un membro pubblico (di tipo HttpContext) che accetta questo valore prima di chiamare il metodo. – Floremin

+0

HttpContext.Current non è globale per l'applicazione. È impostato in azioni e viste che soddisfano la richiesta, ma al di fuori del ciclo di richiesta (cose come modelli, classi di utilità, ecc.) Non esiste. Se ti serve lì, devi passarlo da un'azione o vedere dove esiste come dice @Floremin. –

+0

OK - Sì, questo è all'interno di un'azione nel mio controller. HttpContext risolve, ma non corrente. Trovo HttpContext.Request.Files senza la corrente statica, e questo sembra funzionare bene. Non sei sicuro del motivo per cui la corrente statica non è presente, forse non accessibile dal "contesto" del controller? Spero di non "mancare" nulla che non usi la staticità. Grazie! – Nick

risposta

39

Il problema è che la classe Controller ha una proprietà pubblica denominata HttpContext (vedere http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext.aspx).

Ciò significa che quando si tenta di utilizzarlo senza alcuna qualifica nel controller, esso risolve la proprietà locale e non System.Web.HttpContext. Il tipo di proprietà è HttpContextBase che ha una proprietà Request che avrebbe fatto ciò che si vuole (anche se nota che non è la stessa classe, come si otterrebbe da System.Web.HttpContext.

88

Prova prefisso con System.Web.

Se provo System.Web.HttpContext.Current, allora corrente c'è, ma se provo HttpContext.Current, allora non riconosce 'Corrente'. Io ho System.Web nelle mie istruzioni using, ma mi sembra ancora che sia necessario specificarlo per poter accedere a "Current".

+1

@Chris ha risposto perché devi prefisso HttpContext con System.Web, anche se hai incluso System.Web nelle tue istruzioni using. perché il controller ha già una proprietà HttpContext e se si utilizza senza System.Web, fa riferimento alla sua proprietà locale che non ha corrente. – Niraj

2

libreria molto semplice add

using System.Web; 

e sostituire

context.Response -> HttpContext.Current.Response 

significa

context -> HttpContext.Current 

e il tuo problema è risolto.