【发布时间】:2021-09-13 22:23:08
【问题描述】:
我从一个 API 供应商那里收到了一个 Postman json 集合,它运行良好,但对我来说有些神秘:请求是 GET 格式,但有一个 x-www-form-urlencoded 正文。
网址:https://login.microsoftonline.com/d1e<secret>9563/oauth2/token
当我查看 postman 生成的 c# 代码时,谜团还在继续:
var client = new RestClient("https://login.microsoftonline.com/d1e...d3/oauth2/token");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "c06bb...79");
request.AddParameter("client_secret", "7~u...D");
request.AddParameter("resource", "https://vault.azure.net");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
注意 GET 调用的 AddParameter 结构。对我来说,仅仅将这些值添加到查询字符串中,这一定是一件轻而易举的事。但是当我查看邮递员控制台时,我看到:
在邮递员控制台中,我本来希望看到那些作为查询字符串附加到 url 的参数,然后一切都会变得有意义。但是你可以看到这是一个真正的Request Body。
当我在我的 c# 代码中进行 GET 调用时,我喜欢使用简单而可靠的 WebClient 对象来调用 DownloadString() 方法。但是这种方法仅适用于 GET,无法发送表单发布样式body,可以理解。
邮递员是否真的发送了一个 GET,所有这些值都作为查询字符串附加到 url 中?我应该在我的DownloadString() 通话中做同样的事情吗?还是这里发生了其他事情?我是否应该在我的 c# 中调用 UploadString() 方法并以 GET 形式发送表单 post BODY??
【问题讨论】: