2013-02-27 12 views
27

ImageResizer'ı kullanmak istiyorum (ImageResizing dot net'ten). MVG için ImageResizer'ı NuGet aracılığıyla kurdum. Ama örnekten şu kodu kullanın giderken:HttpContext.Current MVC 4'de Çözümlenmiyor 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" foreachta çözme değil? Benim kullanimlarim dogrudur ve Visual Studio "Resolve" seçenekleri sunmaz. Ben System.Web.HttpContext.Current denerseniz

+0

HttpContext.Current bir şey ayarlandı mı ("çözülüyor"), yoksa yalnızca HttpContext.Current.Request.Files.Keys görmüyor musunuz? Bu kod kontrol cihazınızdan mı yoksa başka bir sınıftan mı geliyor? Bu, başka bir sınıftaki bir yöntemdense, HttpContext.Current dosyasını bir şekilde geçirdiğinizden emin olun. Çağrılan yönteme bir parametre olarak veya yöntemi çağırmadan önce bu değeri kabul eden genel bir üyeye (HttpContext türünden) sahip olun. – Floremin

+0

HttpContext.Current, uygulamanıza global değildir. İstekte bulunan eylemlerde ve görünümlerde ayarlanır, ancak istek döngüsünün dışında (modeller, yardımcı programlar vb. Şeyler) mevcut değildir. Oraya ihtiyacınız varsa, bunu bir eylemden geçirmeniz veya @Floremin'in söylediği gibi nerede olduğunu görmeniz gerekir. –

+0

Tamam - Evet, bu benim denetleyicimde bir eylem içinde. HttpContext Çözümler, ancak Geçerli değil. Statik Akım olmadan HttpContext.Request.Files buluyorum ve bu iyi çalışıyor gibi görünüyor. Statik Akımın neden orada olmadığından emin değilsiniz, belki de Denetleyici "bağlamından" erişilemiyor mu? Umarım statik olmayan bir şey "eksik" değilim. Teşekkürler! – Nick

cevap

39

Sorun, Controller sınıfının HttpContext adı verilen bir genel özelliğe sahip olmasıdır (bkz. http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.httpcontext.aspx).

Bu, denetleyicide herhangi bir kalifikasyon olmadan kullanmaya çalıştığınızda, System.Web.HttpContext değil yerel mülke giderildiği anlamına gelir. mülkiyet türü System.Web.HttpContext dan alacağı gibi aynı sınıf değil notu bu olsa (istediğini yapacağını bir Request özelliği var HttpContextBase olduğunu.

88

sonra Akım, orada System.Web.

ile önek deneyin ama HttpContext.Current çalışırsanız, o zaman 'Şu' tanımıyor. Benim kullandığım ifadelerde System.Web var, ama hala 'Current' erişmek için bunu belirtmek için gerekli görünmektedir.

+1

@Chris, kullandığınız ifadelerde System.Web'i dahil etmiş olsanız bile, neden HttpContext'i System.Web ile eklemeniz gerektiğini yanıtladı. çünkü denetleyicinin zaten bir HttpContext özelliği vardır ve System.Web olmadan kullanırsanız, geçerli olmayan yerel özelliğine başvurur. – Niraj

2

Çok basit eklenti kütüphanesi

using System.Web; 

ve

context.Response -> HttpContext.Current.Response 

yerine

context -> HttpContext.Current 
demektir

ve sorununuz çözüldü.