POST我在請求我不是其所有者的 API 時遇到問題。
請求必須簡單地發布 JSON 資料。請看一看:
var
RESTRequest : TRESTRequest;
RESTClient : TRESTClient;
Response : TRESTResponse;
contract : TJSONObject;
begin
RESTClient := TRESTClient.Create('URL');
try
RESTRequest := TRESTRequest.Create(nil);
try
contract := TJSONObject.Create;
contract.AddPair(TJSONPair.Create('name','my_first_contract.pdf'));
RESTRequest.Client := RESTClient;
RESTRequest.Method := rmPOST;
RESTRequest.Accept := 'application/json';
RESTRequest.AddParameter('j_token','mytoken',pkHTTPHEADER,poDoNotEncode);
RESTRequest.AddBody(contract);
RESTRequest.Execute;
Response := RESTRequest.Response;
ShowMessage(Response.StatusText ' : ' Response.Content);
finally
RESTRequest.Free;
end;
finally
RESTClient.Free;
end;
end;
我得到了這個錯誤:
未找到:{“錯誤”:“JsonConvert 中的致命錯誤。在 JsonConvert.deserializeObject() 中傳遞的引數 json 物件不是物件型別。\n”}
我在網上讀到,AddBody()如果它是一個物件,該方法首先序列化它的內容。在這種情況下,正文的內容是 my TJSONObject,但是當我嘗試用 a 替換它時String,如下所示:
var
contract : String;
...
begin
contract := '{"name":"my_first_contract.pdf"}';
...
RESTRequest.AddBody(contract, ctAPPLICATION_JSON);
...
end;
我得到了完全相同的錯誤。
那么,這是否意味著 aTJSONObject不被視為JsonConvert.deserializeObject()方法的物件?或者,是不是序列化AddBody()搞砸了?
uj5u.com熱心網友回復:
問題出在“j_token”標題上:當我試圖解決它時,一些朋友想幫助我,但我不想給他們訪問令牌,因為它是我公司獨有的。他們仍然嘗試使用虛假令牌訪問 api,結果與我得到的錯誤相同:
未找到:{“錯誤”:“JsonConvert 中的致命錯誤。在 JsonConvert.deserializeObject() 中傳遞的引數 json 物件不是物件型別。\n”}
多虧了這一點,我可以推斷出問題出在 j_token 上。設定我自己的 api 后,我可以查看我發布的內容,然后我看到我的“j_token”標頭仍在被編碼,即使我在我的方法中添加了poDoNotEncode選項。AddParameter
如果您偶然發現同樣的問題,我在此論壇上創建了一個新帖子來查找該 poDoNotEncode 錯誤:TRESTRequest.AddParameter() 方法中的 poDoNotEncode 選項出現問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/509888.html
標籤:休息德尔福
上一篇:在面板中間準確對齊組件
下一篇:將單個表單重置為其初始狀態
