【问题标题】:Why does Post action work in Postman, not in C#为什么 Post 操作在 Postman 中有效,而不是在 C# 中
【发布时间】:2021-02-10 03:14:14
【问题描述】:

我正在尝试执行 GET 命令,以便可以从服务器获取数据。下面的 Curl 在 Postman 中工作。

$ curl -X GET -H "Authorization: {SESSION_ID}" \
https://{server}/api/{version}/metadata/vobjects

在运行我的代码时,我能够获取会话 ID。下一步是获取数据。但是当我执行 GET 时,我没有得到任何响应。相反,我收到如下错误:“指定的值具有无效的 HTTP 标头字符。(参数'名称')”

下面是我尝试执行的 C# 代码

public static void getObjects(string sessionID)
        {
            var client = new RestClient("https://generic-server.com/api/v20.3/metadata/vobjects/");
            client.Timeout = -1;
            var request = new RestRequest(Method.GET);
            request.AddHeader("Authorization:", sessionID);
            IRestResponse response = client.Execute(request);
            Console.WriteLine("Here's the response: "  + response.Content + " " + response.Content.Length);
            Console.WriteLine("Here's the error message: " + response.ErrorMessage);
        }

问题:我没有收到服务器的响应,响应长度为零。

这是响应:0

response.ErrorMessage 给出以下信息:

以下是错误消息:指定的值包含无效的 HTTP 标头字符。 (参数“名称”)

注意:当我将冒号留在标头之外时,我会从服务器收到以下响应:

{"responseStatus":"FAILURE","errors":[{"type":"INVALID_DATA","message":"无效的http头[接受:application/json, text/json, text/x-json , 文本/javascript, 应用程序/xml, 文本/xml]"}]} 190

【问题讨论】:

  • 那么你用fiddler比较请求了吗?
  • 我认为您应该将冒号从标头中删除,作为建议,您可以测试将“Accept:application/json”标头添加到请求中。
  • @NavidRsh 你将如何构建 curl 命令?
  • @00110001 我比较了提琴手的输出。它说我在邮递员中有一个会话 ID,而不是在 C# 中。我不知道为什么它会这么说,因为我有一个会话 ID
  • @vincetaylor70 我知道 curl 命令没有那个标头,但是错误消息说明了这个标头,我认为至少值得一试。

标签: c# api get


【解决方案1】:

你试过了吗("Authorization", $"Bearer {sessionID"});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2021-08-19
    • 2019-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多