winforms API POST方法将所有变量作为空C#窗体传递

hyrbngr7  于 2023-01-14  发布在  C#
关注(0)|答案(1)|浏览(158)

我有一个用.NET创建的WEB API,我有一些POST和GET方法,我想在另一个C# Windows窗体项目中使用。GET方法工作正常,但由于某种原因,我无法让POST方法工作,因为它没有传递正确的变量。
我有一个构造函数来设置默认的url

client.BaseAddress = new Uri("http://localhost:7101/");
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(
                new MediaTypeWithQualityHeaderValue("application/json"));

所以我有这个post方法,API得到调用,但是两个变量都等于0(在API中),而在这个方法中,它们具有不同的值(正确的值)。
下面是API:

[HttpPost]
[Route("UpdatePercentage")]
public void UpdatePercentage(int playerid, int percentage)
{
    ...
}

下面是我如何使用它:

var userid = 2;
var percentageText = 21;
var response = await client.PostAsJsonAsync("UpdatePercentage",
    (userid, percentageText));
mbskvtky

mbskvtky1#

你必须解决两件事:

  • 您正在使用元组;请使用匿名类型。
  • 传递了错误的参数名。

因此,请按如下方式修复代码:

var playerid = 2;
var percentage = 21;
var response = await client.PostAsJsonAsync("UpdatePercentage",
    new {playerid , percentage});

var userid = 2;
var percentageText = 21;
var response = await client.PostAsJsonAsync("UpdatePercentage",
    new {playerid = userid , percentage = percentageText});
    • 示例:**

假设您有以下变量:

var x= 1;
var y = "something";

然后:

  • 如果您将(x, y)作为参数传递,它将被json序列化为{"Item1":1,"Item2":"something"},这不是API所期望的。
  • 如果您将new {x, y}作为参数传递,它将被json序列化为API所期望的{"x":1,"y":"something"}

相关问题