How to send a PATCH request correctly

I need to call this REST endpoint

PATCH https://graph.windows.net/contoso.onmicrosoft.com/users/ username@contoso.onmicrosoft.com ?api-version=1.5 HTTP/1.1 { "<extensionPropertyName>": <value> } 

See the documentation here: https://msdn.microsoft.com/en-us/library/azure/dn720459.aspx

I have the following code to set the value of a single property for a user:

 public async Task<ActionResult> AddExtensionPropertyValueToUser() { Uri serviceRoot = new Uri(azureAdGraphApiEndPoint); var token = await GetAppTokenAsync(); string requestUrl = "https://graph.windows.net/mysaasapp.onmicrosoft.com/users/ usuario1@mysaasapp.onmicrosoft.com ?api-version=1.5"; HttpClient hc = new HttpClient(); hc.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token); var method = new HttpMethod("PATCH"); var request = new HttpRequestMessage(method, requestUrl) { Content = new StringContent("{ \"extension_33e037a7b1aa42ab96936c22d01ca338_Compania\": \"Empresa1\" }", Encoding.UTF8, "application/json") }; HttpResponseMessage hrm = await hc.GetAsync(new Uri(requestUrl)); if (hrm.IsSuccessStatusCode) { string jsonresult = await hrm.Content.ReadAsStringAsync(); return View("TestRestCall", new SuccessViewModel { Name = "The Title", Message = "The message", JSON = jsonresult.ToJson() }); } else { return View(); } } 

However, instead of responding with 204 (without content), it responds to all user properties, so I think something is wrong with my rest. Call

http://screencast.com/t/LmoNswKIf2

+6
source share
1 answer

I think your problem in this line:

 HttpResponseMessage hrm = await hc.GetAsync(new Uri(requestUrl)); 

This sends an HTTP GET request to the URL you specify, which in this case refers to the user usuario1@mysaasapp.onmicrosoft.com . This is why you see all user properties returned in the response.

I think you want to send the PATCH HttpRequestMessage message that you created. To do this, you need to use the SendAsync method and provide the HttpRequestMessage parameter as the parameter. If you change the line above to the next, I think you will set the property value and get a 204 No Content response:

 HttpResponseMessage hrm = await hc.SendAsync(request); 
+8
source

Source: https://habr.com/ru/post/987872/


All Articles