2011-06-09 32 views
3

我想將一些數據發佈到ASP.NET MVC Controller Action。目前我正在嘗試使用WebClient.UploadData()將多個參數發佈到我的操作中。如何在MVC Action中獲取發佈的數據?

以下操作將觸發,但所有參數均爲空。如何從http請求獲取發佈的數據?

string postFormat = "hwid={0}&label={1}&interchange={2}localization={3}"; 
var hwid = interchangeDocument.DocumentKey.Hwid; 
var interchange = HttpUtility.UrlEncode(sw.ToString()); 
var label = ConfigurationManager.AppSettings["PreviewLabel"]; 
var localization = interchangeDocument.DocumentKey.Localization.ToString(); 

string postData = string.Format(postFormat, hwid, interchange, label, localization); 

using(WebClient client = new WebClient()) 
{ 
    client.Encoding = Encoding.UTF8; 
    client.Credentials = CredentialCache.DefaultNetworkCredentials; 
    byte[] postArray = Encoding.ASCII.GetBytes(postData); 
    client.Headers.Add("Content-Type", "pplication/x-www-form-urlencoded"); 
    byte[] reponseArray = client.UploadData("http://localhost:6355/SymptomTopics/BuildPreview",postArray); 
    var result = Encoding.ASCII.GetString(reponseArray); 
    return result; 
} 

這裏是我打電話

行動

公衆的ActionResult BuildPreview(字符串HWID,串 標籤,串交流,串 本地化){ ...}

當達到此操作時,所有參數都爲空。

我已經嘗試使用WebClient.UploadValue()並將數據作爲NameValueCollection傳遞。這個方法總是返回一個500的狀態,因爲我在MVC應用程序中發出這個http請求,所以我找不到一個方法來調用它。

解決這個問題的任何幫助都會非常有幫助。

-Nick

我糾正了標題爲:立即用

client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); 

現在UploadData只是錯誤與服務器錯誤500

+0

獲取原始發佈字節內容類型看壞了。你在'pplication/x-www-form-urlencoded'的前面缺少'a'。 – 2011-06-09 02:52:53

+0

謝謝..所以當我糾正我的錯誤UploadData()只有錯誤500 – Nick 2011-06-09 03:04:08

+0

你有任何特殊的路線定義? – Jedidja 2011-06-09 04:28:09

回答

3

我能從Request對象的InputStream屬性中獲得後期xml數據。

 public ActionResult BuildPreview(string hwid, string label, string localization) 
     { 
      StreamReader streamReader = new StreamReader(Request.InputStream); 
      XmlDocument xmlDocument = new XmlDocument(); 
      xmlDocument.LoadXml(streamReader.ReadToEnd()); 
       ... 

} 
5

只是爲了笑在Request.FormRouteData看看在你的控制器中查看是否有結果。

+0

這應該是被接受的答案 – Apolo 2014-07-15 10:27:28

+0

同意,應該是被接受的答案。這裏是一個新手的例子:string somethingFromAField = Request.Form.Get(「someTextField」); - 「someTextField」來自我們剛剛發送的表單 – jonprasetyo 2015-03-19 06:40:16

2

作爲一種權宜之計,您可以隨時將控制器操作更改爲接受FormCollection參數,然後直接進入並訪問表單參數。

0

WebClient.UploadData("http://somewhere/BuildPreview", bytes)

public ActionResult BuildPreview() 
{ 
    byte[] b; 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     Request.InputStream.CopyTo(ms); 
     b = ms.ToArray(); 
    } 

    ... 
} 
相關問題