none
Listeneintrag per Rest aktualisieren

    Allgemeine Diskussion

  • Hallo zusammen,

    ich schreibe gerade an einer UWP-App, die per Rest einen Listeneintrag aktualisieren soll. Die Liste liegt auf einem OnPremise-SharePoint 2013.

    Das Abrufen und das Erstellen von Einträge klappt einwandfrei nur das Aktualisieren schlägt fehl.

    Mein Code sieht so aus:

    string strSchadenAlsJson = "{ '__metadata': {'type':'SP.List'},'Title':'Neuer Wert'},";
    HttpClient client = new HttpClient(new HttpClientHandler() { Credentials = UserCredentials });
    client.DefaultRequestHeaders.Clear();
    client.DefaultRequestHeaders.Add("X-RequestDigest", GetFormDigest());
    client.DefaultRequestHeaders.Add("IF-MATCH", "*");
    client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
    HttpContent content = new StringContent(strSchadenAlsJson);
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    content.Headers.ContentType.Parameters.Add(new NameValueHeaderValue("odata", "verbose"));
    string restURL = @"https://MySharePoint/_api/web/lists(guid'57f1fb6c-1ec1-4200-94a6-1cc68807a97b')/GetItembyStringID('38')";
    HttpResponseMessage response = await client.PostAsync(restURL, content);
    response.EnsureSuccessStatusCode();
    if (response.IsSuccessStatusCode)
    { }
    
    

    Ich erhalte als Fehlermeldung folgendes aus Fiddler:

    "cc {"error":{"code":"-1, Microsoft.SharePoint.Client.InvalidClientQueryException","message":{"lang":"de-DE","value":"Der Parameter \"__metadata\" ist in der Methode \"GetItemByStringId\" nicht vorhanden."}}} 0"

    Hat jemand eine Idee?

    Gruß

    Thomas


    I love WindowsPhone

    Mittwoch, 8. Februar 2017 10:12

Alle Antworten

  • Hi Thomas,
    wie sieht die Anforderung aus (GetFormDigest)? Liefert Deine GetFormDigest auch wirklich ein "PUT"?

    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Mittwoch, 8. Februar 2017 14:49
  • Hallo Peter,

    für das Hinzufügen eines neuen Eintrags funktioniert meine GetFormDigest-Funktion.in jetzt nicht so der Spezialist in dem Bereich, aber der FormDigest ist doch "eigentlich" nur eine Art GUID, oder? Woran erkenne ich, dass der einen PUT liefert? 

    Das ist meine Funktion:

    void GetFormDigest()
            {
                try { 
                string retVal = "";
                HttpClient client = new HttpClient(new HttpClientHandler() { Credentials = UserCredentials });
                client.BaseAddress = new Uri(BaseURL);
                string cmd = "_api/contextinfo";
                client.DefaultRequestHeaders.Add("Accept", "application/json;odata=verbose");
                client.DefaultRequestHeaders.Add("ContentType", "application/json");
                client.DefaultRequestHeaders.Add("ContentLength", "0");
                StringContent httpContent = new StringContent("");
                var response = client.PostAsync(cmd, httpContent).Result;
                if (response.IsSuccessStatusCode)
                {
                    string content = response.Content.ReadAsStringAsync().Result;
                    JsonObject val = JsonValue.Parse(content).GetObject();
                    JsonObject d = val.GetNamedObject("d");
                    JsonObject wi = d.GetNamedObject("GetContextWebInformation");
                    retVal = wi.GetNamedString("FormDigestValue");
                }
                if(retVal != "")
                    { 
                        Digest = retVal;
                    }
    
                }
                catch
                { }
            }

    Gruß

    Thomas


    I love WindowsPhone

    Mittwoch, 8. Februar 2017 15:16