2012-04-03 17 views
6

मैं एक सांत्वना आवेदन MVC 3 ASP.NET में विकसित एक वेब अनुप्रयोग के लिए एक एक्सएमएल फ़ाइल भेजने के लिए कोशिश कर रहा हूँ से ASP.NET MVC में एक फ़ाइल अपलोड, और एक प्रतिक्रिया के रूप में एक और एक्सएमएल प्राप्त करने के लिए ।कैसे एक सांत्वना आवेदन

सांत्वना आवेदन में त्रुटि दी है:

Object reference not set to an instance of an object.

सांत्वना आवेदन में कोड है::

static void Main(string[] args) 
{ 
    var wc = new WebClient(); 
    byte[] response = wc.UploadFile("http://mysite.com/Tests/Test", "POST", "teste.xml"); 
    string s = System.Text.Encoding.ASCII.GetString(response); 
    Console.WriteLine(s); 
    Console.ReadKey(); 
} 

The remote server returned an error: (500) Internal Server Error.

जब मैं Fiddler2 चलाने के लिए, मैं यह त्रुटि दिखाई

MVC नियंत्रक में कोड है:

[HttpPost] 
public ActionResult Test(HttpPostedFileBase file) 
{ 
    XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream)); 
    var test = new MyTest(); 
    return File(test.RunTest(xml), "text/xml", "testresult.xml"); 
} 

RunTest() अच्छी तरह से काम करता है, क्योंकि जब मैं फॉर्म के माध्यम से फ़ाइल अपलोड करता हूं (उसी नाम के साथ विधि में, विधि GET का उपयोग करके) यह विधि काम करता है। RunTest() प्रतिक्रिया के साथ एक्सएमएल देता है।

जब मैं MVC आवेदन डिबग, मैं इस समस्या देखें: चर file बातिल है!

मुझे लगता है कि कैसे ठीक करूं? वास्तव में फ़ाइल भेजने के लिए मुझे अपने कंसोल एप्लिकेशन में क्या बदलना है? या क्या यह एमवीसी विधि को बदलने का मामला है?

और, WebClient का उपयोग करने का प्रयास करने से पहले, मैंने इस कोड को यहां आजमाया: http://msdn.microsoft.com/en-us/library/debx8sh9.aspx, और उसके परिणाम भी थे।

उत्तर

6

आपका समस्या यह है कि WebClient.UploadFile enctype एक इनपुट "फाइल" नाम MVC को मैप करने के लिए उपयोग कर रहा/फार्म डेटा मल्टीपार्ट करने के लिए सेट के साथ एक फार्म पोस्टिंग नहीं है। इस पर अपनी सर्वर साइड विधि को बदलने का प्रयास करें:

[HttpPost] 
public ActionResult Test() 
{ 
    var file = Request.Files[0] as HttpPostedFile; 
    XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream)); 
    var test = new MyTest(); 
    return File(test.RunTest(xml), "text/xml", "testresult.xml"); 
} 
+1

यह काम किया! मुझे बस 'httpPostedFile' के रूप में हटाने की आवश्यकता है, यह संकलन नहीं कर रहा था ... बहुत बहुत धन्यवाद! –

+0

धन्यवाद दोस्त, मेरी मदद की! – f0x

0

आपको अपलोड की गई फ़ाइल के साथ पैरामीटर के लिए नाम पास करने की आवश्यकता है। WebClient के साथ यह संभव नहीं है।

मैं भी था UploadFile के बजाय समारोह UploadData का उपयोग कर यह करने के लिए:

चेक

How to specify form parameter when using webclient to upload file

Send multipart/form-data content type request

+0

अच्छा लिंक; वैसे, लिंक को इस अनुरोध के साथ एक फॉर्म के साथ काम करने की आवश्यकता नहीं है, इसलिए क्रिस का जवाब सिर्फ वही है जो मुझे चाहिए। लेकिन फिर भी धन्यवाद! =) –

0

मामले में किसी को थोड़ा अलग लेकिन संबंधित समस्या है। इस मामले में, बजाय नियंत्रक में लिखने की:

var file = Request.Files[0] as HttpPostedFile; 
XElement xml = XElement.Load(new System.IO.StreamReader(file.InputStream)); 

एक बस लिख सकते हैं:

XElement xml = XElement.Load(new System.IO.StreamReader(Request.InputStream)); 

आसान! ;)

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