web-dev-qa-db-fra.com

HttpContext.Current ne se résout pas dans le projet MVC 4

Je souhaite utiliser ImageResizer (à partir d'ImageResizing dot net). J'ai installé ImageResizer pour MVC via NuGet. Mais quand je vais utiliser le code suivant de l'exemple:

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

Le "HttpContext.Current.Request.Files.Keys" dans foreach ne résout pas? J'ai mes utilisations correctes et Visual Studio n'offre aucune option "Résoudre".

33
Nick

Le problème est que la classe Controller possède une propriété publique appelée HttpContext (voir http://msdn.Microsoft.com/en-us/library/system.web.mvc .controller.httpcontext.aspx ).

Cela signifie que lorsque vous essayez de l'utiliser sans aucune qualification dans le contrôleur, il résout la propriété locale et non System.Web.HttpContext. Le type de la propriété est HttpContextBase qui a une propriété Request qui ferait ce que vous voulez (bien que ce ne soit pas la même classe que celle que vous obtiendriez de System.Web.HttpContext.

56
Chris

Essayez de le préfixer avec System.Web.

Si j'essaie System.Web.HttpContext.Current, alors Current est là, mais si j'essaie HttpContext.Current, il ne reconnaît pas "Actuel". J'ai en effet System.Web dans mes instructions using, mais il me semble toujours nécessaire de le spécifier pour avoir accès à 'Current'.

100
user2343180

Bibliothèque d'ajout très simple

using System.Web;

et remplacer

context.Response -> HttpContext.Current.Response

veux dire

context -> HttpContext.Current

et votre problème est résolu.

2
Dilip0165