为什么在使用 VS 2022 在 C# (RestSharp) 中使用我的 API 时我总是得到 "Missing/Malformed URL Parameters"?

Why do I keep getting "Missing/Malformed URL Parameters" when consuming my API in C# (RestSharp) with VS 2022?

我正在尝试在 Visual Studio 2022.

中使用 RestSharp 在 C# 中执行 POST 请求

使用 Postman 测试了 API,这是成功的。 API 需要一个 64 位编码的 Basic Auth(我有)和一个唯一的 API 密钥(我也有)。然后我查看了 Postman 提供的 C# Restsharp 代码,并尝试将其复制粘贴到我的 VS 项目中,但大多数库已被弃用。然后我最终 修改了代码,所以它没有给我任何错误,并且代码本身运行,但出现语义错误:请求 returns “丢失或格式错误 URL参数。在 body 参数中,我以

形式发送一个参数
var body = @"{""fieldNameHere"": intHere}"; 

我的完整代码(编辑):

        var options = new RestClientOptions("URLHERE")
        {
            Timeout = -1
        };
        var client = new RestClient(options);
        var request = new RestRequest
        {
            Method = Method.Post
        };

        request.AddHeader("API_KEY", "keyHere");
        request.AddHeader("Authorization", "authHere");
        request.AddHeader("Content-Type", "application/json");
        var body = @"{""fieldNameHere"": intHere}";
        request.AddParameter("application/json; charset=utf-8", body, ParameterType.RequestBody);
        request.RequestFormat = DataFormat.Json;

        RestResponse response = await client.ExecuteAsync(request);

所以我尝试使用 JObject 作为参数,得到了同样的错误,这是我的代码:

        JObject jObjectBody = new JObject();
        jObjectBody.Add("FieldName", intHere);

        request.AddParameter("application/json", jObjectBody, ParameterType.RequestBody);

            var clientValue = await client.ExecuteAsync(request);

        

我也尝试过使用 HttpWebRequest,但遇到了一个身份验证错误,所以不确定那里发生了什么,在其他任何地方都没有。无论如何都宁愿使用 RestClient 。这是我尝试执行 body 参数的另一种方式:

string postData = "{\"FieldNameHere\":" + intHere + "}";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);

我还没有找到任何有用的东西。如果有人可以指导我找到解决方案,我将不胜感激,谢谢。这肯定是 body 给我的问题。

啊!出于某种原因,像这样表达我的 body 是可行的:

var body = new { FieldNameHere = intHere }
request.AddJsonBody(body);

我不知道为什么会这样,但确实如此!

无效的列表:

  • JObject技术
  • 切换header放置
  • 自己编码授权
  • 如何设置 RR 实例化
  • 有或没有明确说明 application/json(也包括字符集和排除)
  • 使用 HttpWebRequest 而不是 RestSharp