2016-07-12 98 views
3

我試圖改變使用網站的API的文章內的價格上傳 它的文檔是在https://www.mkmapi.eu/ws/documentation/API_1.1:Stock試圖用PUT請求

在運行的時候,我得到一個錯誤417預期類失敗,這是從文檔中描述如下: 通常情況下,當您的請求具有不帶相應標頭和/或主體不作爲文本發送的XML主體時,您將收到417 Expectation Failed HTTP狀態代碼,但其字節表示形式。 417的另一個可能的原因是,當您發送超過1.024字節的主體數據而不添加標頭Expect:您的請求。

任何幫助,將不勝感激。我也應該說認證不是我可以下載我的文章價格的問題。

public void UpdateMarketPrice(string MarketID, string NewPrice) 
{ 
    // https://www.mkmapi.eu/ws/documentation/API_1.1:Stock 

    String finalResult; 
    String method = "PUT"; 
    String url = "https://www.mkmapi.eu/ws/v1.1/stock"; 

    HttpWebRequest request = WebRequest.CreateHttp(url) as HttpWebRequest; 
    OAuthHeader header = new OAuthHeader(); 
    request.Headers.Add(HttpRequestHeader.Authorization, header.getAuthorizationHeader(method, url)); 
    request.Method = method; 
    request.ContentType = "text/xml; encoding='utf-8'"; 

    XElement xmlDoc = 
     new XElement("request", 
      new XElement("article", 
       new XElement("idArticle", MarketID), 
       new XElement("idLanguage", 1), 
       new XElement("comments", "Edited through the API"), 
       new XElement("count", 7), 
       new XElement("price", 11), 
       new XElement("condition", "NM"), 
       new XElement("isFoil", false), 
       new XElement("isSigned", false), 
       new XElement("isPlayset", false) 
      ) 
     ); 

    String finalXML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" + xmlDoc.ToString(); 
    MessageBox.Show(finalXML); 
    byte[] bytes = Encoding.ASCII.GetBytes(finalXML); 
    request.ContentLength = bytes.Length; 

    using (Stream putStream = request.GetRequestStream()) 
    { 
     putStream.Write(bytes, 0, bytes.Length); 
    } 

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
    { 
     finalResult = reader.ReadToEnd(); 
    } 

    MessageBox.Show(finalResult); 
} 

回答

2

我讀過HttpWebRequest爲請求添加一個「expect 100 continue」標頭,除非你關閉它。有些服務器可能不支持此標頭。並且會產生這個417 Expectation Failed消息。

你可以嘗試設置爲false:

所以頭部不會被髮送。

我見過這個暗示了對其他類似問題的解答。

+0

驚人的作品!非常感謝! –

+0

很高興聽到它的作品!我昨天實際遇到了與mkmapi相同的問題,但自從我工作以來,我沒有時間爲自己嘗試這種溶劑。 – Tim

0

也許用StreamWriter

using (Stream putStream = request.GetRequestStream()) 
{  
    using (var writeStream = new StreamWriter(putStream, Encoding.ASCII)) 
    { 
     writeStream.Write(finalXML); 
    } 
    request.ContentLength = putStream.Length; // I am not sure about that 
} 
+0

感謝您的建議Slai,我試過了你的代碼,但是現在我得到了另一個錯誤System.NotSupportedException。附加信息:此流不支持查找操作。 –