HttpClient PutAsync does not send api parameter

On the controller Put has the following form:

[HttpPut] [ActionName("putname")] public JsonResult putname(string name) { var response = ... return Json(response); } 

The problem is when you use this API following

 using (httpClient = new HttpClient()) { string name = "abc"; string jsonString = JsonConvert.SerializeObject(name); var requestUrl = new Uri("http:...../controller/putname/"); using (HttpContent httpContent = new StringContent(jsonString)) { httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); HttpResponseMessage response = httpClient.PutAsync(requestUrl, httpContent).Result; } 

This code does not pass the parameter name to the controller. I even tried changing uri to / putname / "+ name.

+6
source share
2 answers

Here is what works for me:

 var jsonString = "{\"appid\":1,\"platformid\":1,\"rating\":3}"; var httpContent = new StringContent(jsonString, Encoding.UTF8, "application/json"); var message = await _client.PutAsync(MakeUri("App/Rate"), httpContent); Assert.AreEqual(HttpStatusCode.NoContent, message.StatusCode); 

and my action method:

 public void PutRate(AppRating model) { if (model == null) throw new HttpResponseException(HttpStatusCode.BadRequest); if (ModelState.IsValid) { // .. } } 

and model

 public class AppRating { public int AppId { get; set; } public int PlatformId { get; set; } public decimal Rating { get; set; } } 

-stan

+17
source

For me, this worked correctly:

  string requestUrl = endpointUri + "/Files/"; var jsonString = JsonConvert.SerializeObject(new { name = "newFile.txt", type = "File" }); HttpContent httpContent = new StringContent(jsonString); httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue ("application/json"); HttpClient hc = new HttpClient(); //add the header with the access token hc.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken); //make the put request HttpResponseMessage hrm = (await hc.PostAsync(requestUrl, httpContent)); if (hrm.IsSuccessStatusCode) { //stuff } 
0
source

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


All Articles