MVC denetleyici eylemine veri göndermeye çalışıyorum ancak şu ana kadar başarısız oldum. Ben talep ContentType'ı setVerileri HttpWebRequest kullanarak MVC Denetleyicisine nasıl gönderirim?
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();
için "uygulama/x-www-form-: Burada
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));
}
}
istek: Burada
sonrası verilerin yapısı urlencoded "GetReponse(), sunucu hata kodu 500 ile başarısız olur. Bunu açıkladığımda ve sadece xen verilerini," interchangeXml "yi kodladığımızda, posta gönderilir ancak sadece 3. parametre," etiket "kontrolöre ulaşır. Diğerleri boş.
Bu değerlerden biri xml verileri olduğunda, bir denetleyici eylemine değerler göndermenin doğru yolu nedir?
Teşekkürler!
Güncelleme
sorgu dizesi yoluyla XML dışındaki tüm parametre göndermek duyuyorum. Ancak, sorun şu ki, denetleyici eyleminde yayınlanan verilere nasıl erişileceğini bilmiyorum. Birisi benim Denetleyici Eylemimle birlikte HttpRequest'ten xml'ye nasıl erişebileceğimi söyleyebilir mi?
Güncelleme
ben Darin tarafından bana yapılan önerir kullanmak yukarıdaki kodu refactored var. WebClient UploadValues () kullanarak bir iç sunucu hatası (500) alıyorum.
Eylem:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult BuildPreview(PreviewViewModel model)
{
...
}
İstek:
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);
}
}
Rota: tüm bu istekleri ve yanıtlarıyla
routes.MapRoute(
"BuildPreview",
"SymptomTopics/BuildPreview/{model}",
new { controller = "SymptomTopics", action = "BuildPreview", model = UrlParameter.Optional }
);
veri yapısı sizin MVC eylem ne bekliyor? Sorgu dizgisinin tersine tüm verileri xml olarak gönderemez misiniz? – Jay
Denetleyici eylemi 4 dizeleri bekliyor: interchangeXml, hwid, localisation ve label. Hayır .. xml göndermeye çalıştığım diğer değerleri içermiyor ve içermeyecek. – Nick
İstemcinizin sunucuya tam olarak ne gönderdiğini görmek için Fiddler veya Firebug gibi bir araç kullanmayı denediniz mi? Doğru çıkmayabilir. – Tridus