调用POST方法时发生内部服务器错误

时间:2019-09-24 12:50:57

标签: c# api http console-application

我正在尝试创建一个控制台应用程序,该应用程序能够通过调用特定的API将内容推送到数据库中。我无法控制数据库或API。当我已经创建了该API并测试了GET方法时,该API工作正常,但是我猜我的POST出了点问题。

因此,首先,创建一个 Product 对象,其中包含要发送到API的值。

Product product = new Product
{
     productId = "27795",
     amount = 1,
     customerid = 0,
     returnbasketid = true
};

这是应该调用API的POST方法的方法。

static async Task CreateProductAsync(HttpClient cons, Product product)
    {
        using (cons)
        {
            HttpResponseMessage res = cons.PostAsJsonAsync("", product).Result;
            res.EnsureSuccessStatusCode();
            Console.WriteLine(res.Content.ReadAsStringAsync().Result);
        }
    }

运行代码后,第HttpResponseMessage res = cons.PostAsJsonAsync("", product).Result;行出现以下错误:

  

System.AggregateException:'发生一个或多个错误。 (响应状态代码不表示成功:500(内部服务器错误)。)'

     

HttpRequestException:响应状态代码未指示成功:500(内部服务器错误)。

我想问题是我如何将值发送到API以及API期望什么。我有这个数据预期的例子:

    {
"":[{
 "productId":"27795",
 "amount":2,
 "customerid":0
},{
 "productId":"27796",
 "amount":1,
 "customerid":0
}],
 "returnbasketid":true
}

我已经使用Postman进行了测试,并且工作正常,所以问题一定出在我的代码上。

https://pastebin.com/pZDehaaD这是我的Program.cs的完整示例。该API网址已被删除。

编辑:这是控制台应用程序发送的JSON:

enter image description here

而通过邮递员工作的JSON是这样的:

enter image description here

所以问题是我应该如何编写我的代码,以便正确配置要发送的JSON?

1 个答案:

答案 0 :(得分:1)

您要将产品传递给API(这是上面的第一个Fiddler捕获)。

但是,如果我们查看所需的输入(上面的第二次Fiddlel捕获)以及“期望数据的示例”(灰色背景),则会看到一个对象,该对象包含一个(未命名)Products数组和一个名为“ returnbasketid”的字段“。

如果重新创建此对象,我们需要做什么。我们可以将此类称为“包装器”或“ MyRequestObject”或任何其他名称。名称并不重要。我会尝试这种形式的代码。

public class Wrapper
{

    [JsonProperty("")]  // rename json property to empty string - don't know if this will work
    public List<Product> Products { get; set; } = new List<Product>();

    public bool returnbasketid { get; set; }
}

然后使用cons.PostAsJsonAsync()调用将此包装器的实例而不是产品传递给

问题是我们的包装器的Product数组有一个名称,而服务器需要一个没有名称的数组。我正在尝试重命名上面的数组。如果那很好。否则,我认为您将不得不自己创建json(Newtonsoft可以轻松实现),然后使用HttpClient的PostAsync(Uri,HttpContent)发布。