2016-11-27 23 views
-1

我正在使用以下方法發佈到Web服務。當我使用它時,我經常會遇到400錯誤。如果我用我通過在使用,雖然在Posty相同的數據,該服務返回預期的數據當我使用PostAsync發送數據時,服務器返回400錯誤

public static async Task<T> SendData<T>(string apiToUse, params string[] data) 
    { 
     var url = string.Format("{0}/{1}", Constants.BaseTestUrl, apiToUse); 

     dynamic t; 

     var kvp = new Dictionary<string, string>(); 

     for (var i = 0; i < data.Length; i += 2) 
     { 
      kvp.Add(data[i], data[i + 1]); 
     } 

     var dta = new FormUrlEncodedContent(kvp); 
     dta.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data"); 

     using (var client = new HttpClient()) 
     { 
      var result = client.PostAsync(url, dta).Result; 
      //result.Content.Headers.ContentType = new MediaTypeHeaderValue("multipart/form-data"); 
      var rv = result.Content.ReadAsStringAsync().Result; 
      t = JsonConvert.DeserializeObject<T>(rv); 
     } 

     return t; 
    } 

在我的測試例子,我進入帕拉姆的String []數據的兩個鍵和兩個值。

我能看到的唯一不同之處在於,在點擊發送(我也在這裏完成)之前,我已經定義了Content-Type。

這讓我有點瘋狂,所以任何指針都會被讚賞。

+0

你檢查了目標網址是否正確?我認爲HttpClient在其構造函數中需要一個基地址,然後在其方法上使用相對地址。 –

+0

400中的HTTP響應代碼意味着您的請求有問題。如果不知道您要發佈的服務以及期望的服務,那麼我們可以推薦的內容並不多。檢查您嘗試使用的API的文檔,並確保您的請求格式正確。 – TZHX

回答

0

很難提供一個完整的答案,而不完全知道請求應該如何。你可以嘗試/如下調整代碼:

var kvp = string.Empty; 

for (var i = 0; i < data.Length; i += 2) 
{ 
    kvp += string.Format("{0}={1}; ", data[i], data[i+1]); 
} 

// remove last ';' character 
kvp = kvp.TrimEnd(new char[] { ' ', ';' }); 

var dta = new MultipartFormDataContent(); 
dta.Add(new StringContent(kvp)); 

的變化在於使用MultipartFormDataContent符合要求的格式。顯然,這段代碼只是爲了測試。額外的驗證和內容創建(kvp)應在投入生產之前完成。

相關問題