मैं एमवीसी नियंत्रक कार्रवाई में डेटा पोस्ट करने की कोशिश कर रहा हूं लेकिन अब तक असफल रहा है।मैं HttpWebRequest का उपयोग कर एमवीसी नियंत्रक को डेटा कैसे पोस्ट करूं?
यहाँ पोस्ट डेटा की संरचना है:
HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(controllerUrl);
webRequest.Method = "POST";
// webRequest.ContentType = "application/x-www-form-urlencoded";
string postData = makeHttpPostString(interchangeFile);
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
webRequest.ContentLength = byteArray.Length;
using (Stream dataStream = webRequest.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
}
HttpWebResponse webresponse = (HttpWebResponse) webRequest.GetResponse();
जब मैं अनुरोध के contenttype सेट करने के लिए "application/x-www-फार्म:
private string makeHttpPostString(XmlDocument interchangeFile)
{
string postDataString = "uid={0}&localization={1}&label={2}&interchangeDocument={3}";
InterchangeDocument interchangeDocument = new InterchangeDocument(interchangeFile);
using (var stringWriter = new StringWriter())
using (var xmlTextWriter = XmlWriter.Create(stringWriter))
{
interchangeFile.WriteTo(xmlTextWriter);
string interchangeXml = HttpUtility.UrlEncode(stringWriter.GetStringBuilder().ToString());
string hwid = interchangeDocument.DocumentKey.Hwid;
string localization = interchangeDocument.DocumentKey.Localization.ToString();
string label = ConfigurationManager.AppSettings["PreviewLabel"];
return (string.Format(postDataString, hwid, localization, label, interchangeXml));
}
}
यहाँ अनुरोध है urlencoded "GetReponse() सर्वर त्रुटि कोड 500 के साथ विफल रहता है मुझे लगता है कि बाहर टिप्पणी और केवल httpencode एक्सएमएल डेटा," interchangeXml ", पोस्ट भेज दिया जाता है, लेकिन केवल 3 पैरामीटर," लेबल "नियंत्रक तक पहुँचता है। अन्य शून्य हैं।
सही तरीका एक नियंत्रक कार्रवाई जब उन में से एक मान एक्सएमएल डेटा है के लिए मान पोस्ट करने के लिए क्या है?
धन्यवाद!
अद्यतन
मैं क्वेरी स्ट्रिंग के माध्यम से एक्सएमएल के अपवाद के साथ सभी पैरामीटर भेज रहा हूँ। हालांकि, अब समस्या यह है कि मुझे नहीं पता कि नियंत्रक कार्रवाई में पोस्ट किए गए डेटा को कैसे एक्सेस किया जाए। क्या कोई मुझे बता सकता है कि मैं अपने नियंत्रक एक्शन से HttpRequest से xml तक कैसे पहुंच सकता हूं?
अद्यतन
मैं डैरिन द्वारा मेरे लिए उपयोग करने के लिए किए गए पता चलता है ऊपर कोड पुनर्संशोधित है। मैं WebClient UploadValues () का उपयोग कर एक आंतरिक सर्वर त्रुटि (500) प्राप्त कर रहा हूं।
कार्रवाई:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult BuildPreview(PreviewViewModel model)
{
...
}
अनुरोध:
private string PostToSxController(XmlDocument interchangeFile, string controllerUrl)
{
var xmlInterchange = new InterchangeDocument(interchangeFile);
using (var client = new WebClient())
{
var values = new NameValueCollection()
{
{"uid", xmlInterchange.DocumentKey.Hwid},
{"localization", xmlInterchange.DocumentKey.Localization.ToString()},
{"label", ConfigurationManager.AppSettings["PreviewLabel"]},
{"interchangeDocument", interchangeFile.OuterXml }
};
byte[] result = null;
try
{
result = client.UploadValues(controllerUrl, values);
}
catch(WebException ex)
{
var errorResponse = ex.Response;
var errorMessage = ex.Message;
}
Encoding encoding = Encoding.UTF8;
return encoding.GetString(result);
}
}
रूट:
routes.MapRoute(
"BuildPreview",
"SymptomTopics/BuildPreview/{model}",
new { controller = "SymptomTopics", action = "BuildPreview", model = UrlParameter.Optional }
);
क्या डेटा संरचना अपने MVC कार्रवाई की उम्मीद कर रहा है? क्वेरी स्ट्रिंग के विपरीत, क्या आप xml में सभी डेटा पोस्ट नहीं कर सकते? – Jay
नियंत्रक कार्रवाई 4 तारों की अपेक्षा कर रही है: interchangeXml, hwid, स्थानीयकरण, और लेबल। नहीं .. xml में अन्य मान नहीं हैं जो मैं पोस्ट करने का प्रयास कर रहा हूं। – Nick
क्या आपने फिडलर या फ़ायरबग जैसे टूल का उपयोग करने का प्रयास किया है ताकि यह देखने के लिए कि आपका क्लाइंट सर्वर पर क्या भेज रहा है? यह सही ढंग से बाहर नहीं आ रहा है। – Tridus