2013-08-19 6 views
7

मैं एक HTTP अनुरोध के माध्यम से एक एक्सएमएल स्ट्रिंग भेजने की कोशिश कर रहा हूं, और इसे दूसरे छोर पर प्राप्त करता हूं। प्राप्त करने के अंत में, मुझे हमेशा यह मिल रहा है कि एक्सएमएल शून्य है। क्या आप मुझे बता सकते हैं कि ऐसा क्यों है?HTTP अनुरोध के माध्यम से xml कैसे भेजें, और इसे एएसपी.नेट एमवीसी का उपयोग करके प्राप्त करें?

संदेश:

var url = "http://website.com"; 
    var postData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><xml>...</xml>"; 
    byte[] bytes = System.Text.Encoding.ASCII.GetBytes(postData); 

    var req = (HttpWebRequest)WebRequest.Create(url); 

    req.ContentType = "text/xml"; 
    req.Method = "POST"; 
    req.ContentLength = bytes.Length; 

    using (Stream os = req.GetRequestStream()) 
    { 
     os.Write(bytes, 0, bytes.Length); 
    } 

    string response = ""; 

    using (System.Net.WebResponse resp = req.GetResponse()) 
    { 
     using (StreamReader sr = new StreamReader(resp.GetResponseStream())) 
     { 
      response = sr.ReadToEnd().Trim(); 
     } 
    } 

प्राप्त करें:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Index(string xml) 
{ 
    //xml is always null 
    ... 
    return View(model); 
} 

उत्तर

9

मैं यह इतना जैसा कार्य करने में सक्षम था:

[HttpPost] 
[ValidateInput(false)] 
public ActionResult Index() 
{ 
    string xml = ""; 
    if(Request.InputStream != null){ 
     StreamReader stream = new StreamReader(Request.InputStream); 
     string x = stream.ReadToEnd(); 
     xml = HttpUtility.UrlDecode(x); 
    } 
    ... 
    return View(model); 
} 

हालांकि, मैं अब भी उत्सुक क्यों के रूप में एक्सएमएल ले रहा हूँ एक पैरामीटर काम नहीं करता है।

+0

थोड़ा बदसूरत लगता है, लेकिन MVC के साथ भी मेरे लिए काम किया 4. – AFract

+0

धन्यवाद यह भी मेरे लिए काम किया .. हैं.यदि आप एक धारा आप को पढ़ने के लिए के रूप में यह पोस्ट कर रहे हैं डेटा प्राप्त करने के लिए इनपुट स्ट्रीम। "xml" में प्राप्त करने के लिए आपको पोस्ट पैरामीटर के रूप में क्वेरी स्ट्रिंग के साथ भेजना होगा –

0

मुझे विश्वास है क्योंकि ऐसा इसलिए है क्योंकि आपने req.ContentType = "text/xml"; निर्दिष्ट किया है।

अगर मैं सही ढंग से याद है जब आप अपने नियंत्रक एक "आदिम" प्रकार का उपयोग को परिभाषित (string एक "आदिम" प्रकार यहाँ किया जा रहा है)

public ActionResult Index(string xml){} 

MVC या तो एक क्वेरी स्ट्रिंग में या में xml देखने के लिए कोशिश करेंगे पोस्ट फॉर्म डेटा (एचटीएमएल इनपुट फ़ील्ड)। लेकिन अगर आप सर्वर के लिए कुछ और जटिल भेजते हैं तो एमवीसी इसे एक विशिष्ट वर्ग में लपेट लेगा।

उदाहरण के लिए, यदि आप सर्वर के लिए कई फाइल अपलोड जब आप उन्हें अपने नियंत्रक

public ActionResult Index(IEnumerable<HttpPostedFileBase> files){} 

में इस प्रकार स्वीकार कर सकते हैं तो मेरा अनुमान है कि आप सही वर्ग का उपयोग कर नियंत्रक में text/xml धारा को स्वीकार करना होगा है ।

अद्यतन:

ऐसा लगता है इस तरह के एक वर्ग है क्योंकि आप एक डाटा स्ट्रीम स्वीकार करते हैं (और यह इनपुट तत्व से नहीं आ रही है) नहीं है। आप एक्सएमएल दस्तावेज को स्वीकार करने के लिए अपना खुद का मॉडल बाइंडर लिख सकते हैं। नीचे चर्चा देखें।

Reading text/xml into a ASP.MVC Controller

How to pass XML as POST to an ActionResult in ASP MVC .NET

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