【问题标题】:Error while sending POST request to API (Cannot send a body with this verb type)向 API 发送 POST 请求时出错(无法发送具有此动词类型的正文)
【发布时间】:2017-12-18 11:28:01
【问题描述】:

我在尝试请求 API 时总是收到此错误。 关于api的一些细节:方法是POST,参数也正确(当我在postman上尝试时,没有问题)

这是我的代码:

JavaScriptSerializer js = new JavaScriptSerializer();
using (WebClient client = new WebClient())
{
    foreach (var ad in documents)
    {

        var doc = js.Serialize(ad);
        var json = "{\"Message\":\"" + doc + "\"}";

        var response =
            client.UploadValues("apiUrl", new NameValueCollection()
            {
                {"json", json}
            });
    }
}

我读到 UploadValues 默认为 POST。此代码在一个简单的控制台应用程序中调用。知道为什么会出现此错误吗?

【问题讨论】:

  • WebClientJavaScriptSerializer 大部分都已弃用,您应该使用 HttpClientNewtonSoft.Json
  • var json = "{\"Message\":\"" + doc + "\"}"; Yuk。为什么要手工建造?它只是要求无法捕获的语法错误。您已经在使用序列化程序(尽管已经过时)和 NameValueCollection,那么为什么要在其中随机创建一个字符串呢?无论如何,如果它在 Postman 中有效但在此无效,您应该做的第一件事是使用像 Fiddler 这样的工具来拦截这两个请求,然后找出两个不同软件生成的实际 HTTP 请求之间的差异。跨度>
  • 感谢您的 cmets,它正在使用此代码!

标签: c# api post webclient


【解决方案1】:

这是一段工作代码:

var doc = JsonConvert.SerializeObject(message);    
var stringContent = new StringContent(
        message,
        UnicodeEncoding.UTF8,
        "application/json");

HttpClient client = new HttpClient();                

client.PostAsync("apiUrl", stringContent);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多