2013-02-27 24 views
27

मैं ImageResizer (ImageResizing dot net से) का उपयोग करना चाहता हूं। मैंने NuGet के माध्यम से एमवीसी के लिए ImageResizer स्थापित किया। लेकिन जब मैं उदाहरण से निम्नलिखित कोड का उपयोग करने के लिए जाना:HttpContext.Current एमवीसी 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 में हल करने में नहीं है? मेरे पास मेरे उपयोग सही हैं और विजुअल स्टूडियो कोई "समाधान" विकल्प प्रदान नहीं करता है।

+0

क्या HttpContext.Current कुछ भी सेट है (यह "हल" करता है), या आप केवल HttpContext.Current.Request.Files.Keys नहीं देखते हैं? क्या यह कोड आपके नियंत्रक, या किसी अन्य वर्ग से है? यदि यह किसी अन्य वर्ग में किसी विधि से है, तो सुनिश्चित करें कि आप किसी भी तरह से HttpContext.Current पास करते हैं। या तो जिस विधि को आप बुला रहे हैं उसके पैरामीटर के रूप में, या एक सार्वजनिक सदस्य (HttpContext प्रकार का) है जो विधि को कॉल करने से पहले इस मान को स्वीकार करेगा। – Floremin

+0

HttpContext.Current आपके आवेदन के लिए वैश्विक नहीं है। यह उन कार्यों और विचारों में सेट है जो अनुरोध की सेवा करते हैं, लेकिन अनुरोध चक्र (मॉडल, उपयोगिता वर्ग आदि जैसी चीजें) के बाहर यह अस्तित्व में नहीं है। यदि आपको वहां इसकी ज़रूरत है, तो आपको इसे किसी क्रिया से पास करना होगा या देखें कि यह कहां मौजूद है @Floremin कहते हैं। –

+0

ठीक है - हाँ, यह मेरे नियंत्रक में एक क्रिया के भीतर है। 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 कोशिश, तो यह नहीं पहचानता है 'वर्तमान'। मेरे पास मेरे उपयोग कथन में System.Web है, लेकिन मुझे अभी भी 'वर्तमान' तक पहुंच प्राप्त करने के लिए इसे निर्दिष्ट करने की आवश्यकता है।

+1

@ क्रिस ने इसका उत्तर दिया है कि आपको System.Web के साथ HttpContext को उपसर्ग क्यों करना है, भले ही आपने अपने उपयोग कथन में System.Web शामिल किया हो। क्योंकि नियंत्रक के पास पहले से ही एक HttpContext प्रॉपर्टी है और यदि आप System.Web के बिना उपयोग करते हैं, तो यह इसकी स्थानीय प्रॉपर्टी को संदर्भित करता है जिसमें वर्तमान नहीं है। – Niraj

2

बहुत ही सरल ऐड पुस्तकालय

using System.Web; 

और

context.Response -> HttpContext.Current.Response 

की जगह का मतलब है

context -> HttpContext.Current 

और आपकी समस्या हल हो गई है।

संबंधित मुद्दे