C# HttpClient PutAsync 不向 api 发送参数

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10489611/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 14:02:38  来源:igfitidea点击:

HttpClient PutAsync doesn't send a parameter to api

c#asp.net-mvc-3json.net

提问by fcmaine

On the controller Put is as following:

在控制器上放置如下:

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

The issue is on the when consuming this API via following

问题在于通过以下方式使用此 API 时

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 doesn't pass the parameter name to controller. I even tried changeing uri to /putname/" + name.

此代码不会将参数名称传递给控制器​​。我什至尝试将 uri 更改为 /putname/" + name。

采纳答案by Stan Bashtavenko

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 the model

和模型

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

-Stan

-斯坦

回答by Pablo

For me it 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
            }