C# RestSharp JSON语法

z9gpfhce  于 2023-07-01  发布在  C#
关注(0)|答案(2)|浏览(180)

我的JSON体似乎有语法问题。代码的目的是使用API从LetterXpress检索余额,但不能进行身份验证,我收到的响应是:
(“{“message”:“未经授权。"}”)
使用Postman时请求工作正常。
下面是我的C#代码:

var client = new RestClient("https://api.letterxpress.de/v2/balance");
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/json");

string jsonString = "{" +
    "\"auth\": {" +
        "\"username\" : \"LXPApi1\"," +
        "\"apikey\" : \"442807b35e250ec767221fe3ba\"," +
        "\"mode\" : \"live\"" +
    "}" + "}";
request.AddJsonBody(jsonString);
IRestResponse response = await client.ExecuteAsync(request);
string meinString = response.Content;
textBox4.Text = meinString;

用这个代码,我已经试过了。我怀疑jsonString中的语法不正确。但是,我找不到错误。

g6baxovj

g6baxovj1#

  • “My suspicion is that the syntax in the jsonString is incorrect."* 关闭,这是代码的问题之一。

JSON编码字符串!

AddJsonBody期望一个将被自动序列化的对象-请参阅文档。您所做的实际上是对字符串进行JSON编码,因此请求将永远无法将其反序列化到您的期望。
你应该做的是传递一个具有所有预期属性的对象。您可以使用匿名对象或具体类作为请求主体:

var body = new {
    auth = new {
        username = "LXPApi1",
        apikey = "442807b35e250ec767221fe3ba",
        mode = "live"
    }
};
request.AddJsonBody(body);

带正文的GET请求

您正在发送一个GET请求,并试图在请求中包含一个对GET请求无效的正文。很有可能你应该发送一个POST请求。
不幸的是,API Documentation (in German)显示了一个GET请求,大多数(如果不是全部的话)HTTP客户端都不支持该请求,并且可能不包括请求的主体,即使您已经设置了它。

旁注

  • 我建议您永远不要手动创建JSON,并且始终利用现有的JSON序列化工具将对象转换为JSON。
  • 永远不要在问题中暴露任何凭据。
yx2lnoni

yx2lnoni2#

你正在错误地建立请求这里是一个很好的调用,但未授权。

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    var options = new RestClientOptions("https://api.letterxpress.de")
    {
        UseDefaultCredentials = true,
        //ThrowOnAnyError = true,
        //MaxTimeout = 1000,
    };
    using (RestClient client = new RestClient(options))
    {
        string jsonString = "{" +
        "\"auth\": {" +
            "\"username\" : \"LXPApi1\"," +
            "\"apikey\" : \"442807b35e250ec767221fe3ba\"," +
            "\"mode\" : \"live\"" +
        "}" + "}";

        JsonConvert.DeserializeObject(jsonString).Dump();
        var request = new RestRequest("/v2/balance", Method.Get)
            .AddHeader("Content-Type", "application/json")
            .AddBody(jsonString);
        var response = client.ExecuteAsync(request).Result;
        Console.Write(response.Content);
        
    }

仍然没有授权,正如你提到的-代码运行wwith Postman 请求请添加 Postman 请求x1c 0d1x的屏幕截图

相关问题