2016-07-12 14 views
3

I API unter Verwendung der Websites für sie die Dokumentation Wenn er gestartet bin versucht, den Preis eines Artikels zu ändern, bei https://www.mkmapi.eu/ws/documentation/API_1.1:StockDer Versuch, mit einem PUT-Anfrage hochladen

der Klasse I einen Fehler 417 Expectation erhalten fehlgeschlagen, das ist beschrieben in der Dokumentation als: In der Regel erhalten Sie einen 417 Expectation Failed HTTP-Statuscode, wenn Ihre Anfrage einen XML-Body ohne den entsprechenden Header und/oder den Körper nicht als Text gesendet hat, sondern seine Byte-Darstellung. Ein weiterer möglicher Grund für eine 417 ist, wenn Sie Body-Daten mit mehr als 1.024 Bytes senden, ohne den Header zu ergänzen: Expect: auf Ihre Anfrage.

Jede Hilfe wäre willkommen. Ich sollte auch sagen, dass die Authentifizierung nicht das Problem ist, dass ich meine Artikelpreise herunterladen kann.

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); 
} 

Antwort

2

Ich habe gelesen, dass HttpWebRequest eine "expect 100 continue" Header zu Anfragen hinzufügen, es sei denn, Sie deaktivieren es. Es gibt Server, die diesen Header möglicherweise nicht unterstützen. Und wird diese Meldung 417 Erwartung fehlgeschlagen erzeugen.

Sie könnten versuchen, es auf false:

So ist der Header nicht gesendet.

Ich habe diese vorgeschlagene Lösung zu anderen ähnlichen Fragen auch gesehen.

+0

Erstaunlich, dass funktioniert! Ich danke dir sehr! –

+0

Gut zu hören, es funktioniert! Ich habe das gleiche Problem mit mkmapi gestern, aber ich hatte keine Zeit, um die Lösung für mich selbst zu versuchen, da ich bei der Arbeit bin. – Tim

0

Vielleicht StreamWriter verwenden?

+0

Vielen Dank für Ihren Vorschlag Slai, ich habe versucht, Ihren Code, aber jetzt bekomme ich einen anderen Fehler System.NotSupportedException. Zusätzliche Informationen: Dieser Stream unterstützt keine Suchvorgänge. –

Verwandte Themen