2017-03-15 4 views
1

J'essaie de mettre à jour la catégorie de courrier électronique et de la marquer comme lu après cela avec l'aide de Outlook 365 API et HttpClient. Abonnements this tutorial.Obtenir une erreur de requête incorrecte lors de la mise à jour de la catégorie de courrier électronique avec l'API Office 365 et HttpClient en C#

Dans le tutoriel, le code est comme ci-dessous pour mettre à jour la catégorie et marquer comme lu mais, je ne comprends pas comment dois-je attacher ces détails à HttpClient et demander.

PATCH https://outlook.office.com/api/v2.0/me/messages/AAMkAGE0Mz8S-AAA= 
Content-Type: application/json 

{ 
"Categories": [ 
"Orange category", 
"Green category" 
], 
"IsRead": true 
} 

La méthode et HttpClient j'utilise sont comme ci-dessous:

Update 1

public string UpdateCategory(AuthenticationResult result, string mediator) 
    { 
    //HTTPMethod.PATCH not available to adding it manualy. 
    var httpMethod = new HttpMethod("PATCH"); 
    HttpRequestMessage request = new HttpRequestMessage(httpMethod, mediator); 
    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 
    //JSON in a string variable for test 
    var tempJson = @"{""Categories"" : ""Checking""}"; 
    Converting string to JSON 
    var jsonData = JsonConvert.SerializeObject(tempJson); 
    //Adding the JSON to request.Content 
    request.Content =new StringContent(jsonData,Encoding.UTF8, "application/json"); 
    HttpResponseMessage response = httpClient.SendAsync(request).Result; 
    if (!response.IsSuccessStatusCode) 
    throw new WebException(response.StatusCode.ToString() + ": " + response.ReasonPhrase); 
    mediator = response.Content.ReadAsStringAsync().Result; 
    return mediator; 
    } 

Il jette des Bad Request erreur. J'utilise 365 API avec une application WPF. S'il vous plaît donnez votre avis.

Répondre

0

Enfin obtenu la solution. Ici c'est pour les débutants comme moi.

Quelle a été l'erreur -

Lorsque je demande API avec PATCH avec le corps que je recevais Bad Request erreur.

Ce que je faisais mal -

Quand j'évalué ma demande avec this outil génial pour API perspectives d'essai 365, je viens de connaître l'erreur qui a été

"error": { 
    "code": "RequestBodyRead", 
    "message": "An unexpected 'PrimitiveValue' node was found when reading from the JSON reader. A 'StartArray' node was expected." 
} 

Cette erreur signifie que je envoyait de mauvaises données. J'envoyais string à un List<string>. C'est vraiment bête, je sais mais ça se passe bien? Donc, pour corriger cela au lieu de passer JSON en tant que chaîne fixe, j'ai créé une classe avec une propriété List<string> comme ci-dessous pour avoir la flexibilité d'entrer la catégorie comme bon vouloir.

public class ChangeEmailCategory 
{ 
    public List<string> Categories { get; set; } 

} 

Et voici la méthode finale.

//Passing parameters - AuthenticationResult, URI with authentication header, List of categories. 
public string UpdateCategory(AuthenticationResult result, string uriString,List<string> categories) 
    { 
     //HTTPMethod.PATCH not available so adding it manualy. 
     var httpMethod = new HttpMethod("PATCH"); 
     HttpRequestMessage request = new HttpRequestMessage(httpMethod, uriString); 
     request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); 
     ChangeEmailCategory cec = new ChangeEmailCategory(); 
     cec.Categories = categories; 
     //Serializing class properties as JSON 
     var jsonData = JsonConvert.SerializeObject(cec); 
     //Adding JSON to request body 
     request.Content =new StringContent(jsonData,Encoding.UTF8, "application/json"); 
     HttpResponseMessage response = httpClient.SendAsync(request).Result; 
     if (!response.IsSuccessStatusCode) 
      throw new WebException(response.StatusCode.ToString() + ": " + response.ReasonPhrase); 
     return response.Content.ReadAsStringAsync().Result; 
    } 

Appel de méthode.

List<string> categories = new List<string>(); 
categories.Add("Checking"); 
//utility is my class containing method 
utility.UpdateCategory(result, categoryChangeUri, categories); 

C'est tout! Il m'a fallu un jour pour apprendre et comprendre. Merci à tous les messages sur Stack Overflow et google dont j'ai parlé, mais ne me souviens pas de ne pas mentionner ici.

Si quelqu'un a besoin d'informations supplémentaires à ce sujet faites le moi savoir. Juste mentionnez-moi dans les commentaires. Je vais essayer d'aider.