2016-07-28 165 views
0

我正在處理一個asp.net mvc-4 web應用程序,並且我有以下方法將json對象上傳到第三方應用程序。在這裏我想URL標頭設置爲application/x-www-form-urlencoded: -無法從'字符串'轉換爲'System.Collections.Specialized.NameValueCollection'

using (WebClient wc = new WebClient()) 
       { 
        string url = currentURL + "resources?AUTHTOKEN=" + pmtoken; 
        Uri uri = new Uri(url); 

        wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded"); 

        var encodedJson = WebUtility.UrlEncode(data); 
        crudoutput = wc.UploadValues(uri, "INPUT_DATA=" + encodedJson); 
       } 

但上面是提高以下錯誤: -

無法從「字符串」轉換爲 「System.Collections.Specialized。的NameValueCollection」

爲 最好重載方法匹配 'System.Net.WebClient.UploadValues(的System.Uri, System.Collections.Specialized.NameValueCollection)' 具有一些無效 論據

所以任何人都可以請這個請嗎?

回答

2

錯誤很明顯。 UploadValues需要NameValueCollection不是字符串https://msdn.microsoft.com/en-us/library/9w7b4fz7(v=vs.110).aspx

你的代碼應該是

var nvc = new NameValueCollection(); 

nvc.Add("INPUT_DATA", encodedJson); 

crudoutput = wc.UploadValues(uri, nvc); 

更新

你可以嘗試UploadString代替:https://msdn.microsoft.com/en-us/library/0645045y(v=vs.110).aspx

crudoutput = wc.UploadString(uri, "INPUT_DATA=" + encodedJson); 
+0

不知道爲什麼你正在使用這個myNameValueCollection.Add( 「INPUT_DATA」 ,encodedJson)..現在在我的情況下,json應該以「INPUT_DATA =」開頭,所以我需要在「INPUT_DATA =」和encodedJson之間進行一次concatitation,如我的原始代碼所示。 –

+0

然後嘗試'UploadString'。你問爲什麼你得到的錯誤,所有這些答案修復了 – Eonasdan

+0

但我想使用UploadValues,因爲我想指定內容類型頭爲應用程序/ x-www-form-urlencoded,因爲我知道我不能做所以使用UploadString? –

3

您需要定義一個新的NameValueCollection和傳遞給UploadValues

crudoutput = wc.UploadValues(uri, new NameValueCollection() 
{ 
    { "INPUT_DATA", encodedJson } 
}); 
+0

但我需要將「INPUT_DATA」和encodedJson連接在一起,如圖所示在我的原始代碼中。 –

3

WebClient的UploadValues方法期待一個NameValueCollection,而不是作爲string參數

所以,你可以試試這個: -

using (WebClient wc = new WebClient()) 
    { 
     string url = currentURL + "resources?AUTHTOKEN=" + pmtoken; 
     Uri uri = new Uri(url);  
     wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded"); 

     var encodedJson = WebUtility.UrlEncode(data); 

     NameValueCollection myNameValueCollection = new NameValueCollection(); 
     myNameValueCollection.Add("INPUT_DATA",encodedJson); 
     crudoutput = wc.UploadValues(uri, myNameValueCollection); 
    } 
+0

不知道爲什麼你要使用myNameValueCollection.Add(「INPUT_DATA」,encodedJson)..在我的情況下,json應該從「INPUT_DATA =」開始,所以我需要在「INPUT_DATA =」和encodedJson之間進行一次concatitation,如我的原始代碼所示。 –

+0

但是如果你像這樣追加它,那麼你的json變得無效了嗎?我們假定Input_data是post方法的內容主體的屬性名稱或調用方法的參數。如果你真的需要這樣做,在編碼add-data = data +「INPUT_DATA =」 – ssilas777

+0

之前,現在JSON格式應該以INPUT_DATA =開頭......然後我將添加我的序列化數據給它... –