我從一個API供應商那里收到了一個Postman json集合,它作業得非常好,但是有一些東西讓我感到神秘。該請求是GET格式的,但是有一個x-www-form-urlencoded體。
URL。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"/span>, "application/x-www-form-urlencoded"/span>)。
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(require);
Console.WriteLine(回應.內容)。
注意GET呼叫的AddParameter結構。對我來說,這一定是一個輕而易舉的方法,只是把這些值添加到查詢字串中。
在postman控制臺中,我希望看到這些引數作為一個查詢字串附加到url上,然后一切都會變得有意義。但是你可以看到這是一個真正的Request Body。
當我在我的c#代碼中進行GET呼叫時,我喜歡使用簡單而堅實的WebClient物件來呼叫DownloadString()方法。但是這個方法只適用于GET,而且沒有辦法發送一個form-post風格的body,可以理解。
postman是否真的發送了一個GET,并將所有這些值作為一個查詢字串附加到url上?我是否應該在我的DownloadString()呼叫中做同樣的事情?還是有其他的事情發生在這里?我是否應該在我的c#中呼叫UploadString()方法,并以GET方式發送一個表單帖子BODY?
uj5u.com熱心網友回復:
Http協議支持在請求中添加body,但你使用的WebClient類不支持。可能是因為它不被認為是標準。
我確信 Microsoft 在 OAuth 流程中使用它有很好的理由。這些家伙通常會做正確的事情!
。
uj5u.com熱心網友回復: API只是一個抽象概念,你可以向API發送你想要的任何東西。這取決于實作,服務器如何處理這些資料。
有些服務只考慮它所需要的資訊,而忽略其他資訊 有些服務只考慮它所需要的資訊。
有些服務會考慮整個請求,并驗證它是否只有允許的資料。
Postman只是一個向服務器發送資料的客戶端,它由你決定它應該發送什么資訊。如果你不需要任何機構,那么保持它為無。如果你需要一些東西,那么就添加它。
標籤:


