繁体   English   中英

Call 在 Postman 中有效,但在 C# 中无效

[英]Call works in Postman but not in C#

我正在尝试调用以下 URL,它在浏览器(Chrome)和 Postman 中都可以正常工作,但由于某种原因,它在 C# 中不起作用。

在浏览器中工作:
http://AJWKBLWT47VR26QWPNFCPJLXC6217F6F@presta.craftingcrow.com/api/categories

在邮递员工作:
http://AJWKBLWT47VR26QWPNFCPJLXC6217F6F@presta.craftingcrow.com/api/categories

不适用于 C# (RestSharp):

var client = new RestClient("http://AJWKBLWT47VR26QWPNFCPJLXC6217F6F@presta.craftingcrow.com/api/categories"); 
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("User-Agent", @"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36");
IRestResponse response = client.Execute(request);

响应: 401 未经授权
在此处输入图像描述

PS 如果我删除User-Agent ,它仍然不起作用。 为什么我在这里做错了?

进入邮递员,在您提交请求后,如果您没有在授权选项卡中指定任何内容,请检查标题选项卡中是否有任何可能已添加到“临时标题”部分中的内容。

在此示例中,我没有调用 Authorization 标头,但 Postman 提供了一个标头:

在此处输入图像描述

然后将缺少的相关标头添加到您的代码中。 我喜欢单击请求最右侧的“代码”按钮。 它为您提供了一个下拉列表,以便您可以选择所需语言的预生成代码。 这很可能会给你一个可重现的例子。

在此处输入图像描述 在此处输入图像描述

感谢约书亚和 Vhoang!

在我将代码更改为以下后它正在工作:

var client = new RestClient("http://presta.craftingcrow.com/api/categories"); 
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("AJWKBLWT47VR26QWPNFCPJLXC6217F6F:"));
IRestResponse response = client.Execute(request);

无需添加用户代理或在主机名 (URL) 中包含密钥

RestClient构造函数接受不包含userinfo的 URI

          userinfo       host      port
          ┌──┴───┐ ┌──────┴──────┐ ┌┴┐
  https://john.doe@www.example.com:123/forum/questions/?tag=networking&order=newest#top
  └─┬─┘   └───────────┬──────────────┘└───────┬───────┘ └───────────┬─────────────┘ └┬┘
  scheme          authority                  path                 query           fragment

请参阅: https ://en.wikipedia.org/wiki/Uniform_Resource_Identifier

为了让它与 RestSharp 一起工作,我们需要在这里做一些额外的工作:

// Old:
// var client = new RestClient("http://AJWKBLWT47VR26QWPNFCPJLXC6217F6F@presta.craftingcrow.com/api/categories"); 

// New:
var client = new RestClient("http://presta.craftingcrow.com/api/categories")
{
    Authenticator = new HttpBasicAuthenticator("AJWKBLWT47VR26QWPNFCPJLXC6217F6F", "")
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM