[英]NetSuite OAUTH1 POST request works in Postman but fails in Restsharp
我在 .NET 6 中使用 RestSharp 在 c# 控制台應用程序中執行對 NetSuite 的 POST 請求。 我正在使用基於令牌的身份驗證和 OAuth1
當我在 C# 中使用相同的憑據(消費者密鑰、消費者機密、訪問令牌、訪問令牌機密和領域)執行請求時,對於 GET 請求,它有效。 我能夠進行身份驗證並獲得回復。
當我在 C# 中嘗試 POST 時,我收到 401“未授權”錯誤消息,指出令牌被拒絕。 但是,具有相同身份驗證值和 URL 的相同 POST 請求在 Postman 中有效。
我覺得 Postman 正在以與 Restsharp 不同的方式對身份驗證 header 做一些事情,但這仍然不能解釋為什么 GET 請求與 RestSharp 一起工作
public string ExecuteRequest(string url, int httpMethod, string body = "")
{
var client = new RestClient(url);
client.Authenticator = GetOAuth1Authenticator();
Method method = (Method)httpMethod;
var request = new RestRequest(url, method);
client.AddDefaultHeader("Accept", "*/*");
client.Options.MaxTimeout = -1;
request.AddHeader("Cookie", "NS_ROUTING_VERSION=LAGGING");
request.AddHeader("ContentType", "application/json");
if (string.IsNullOrEmpty(body) == false)
{
request.AddParameter("application/json", body, ParameterType.RequestBody);
}
var response = client.Execute(request);
if (response.IsSuccessful == false)
{
throw new HttpRequestException($"ERROR: {response.ErrorMessage} - RESPONSE CONTENT: {response.Content}");
}
if (response.Content == null)
{
throw new NullReferenceException("API RESPONSE IS NULL");
}
return response.Content;
}
private OAuth1Authenticator GetOAuth1Authenticator()
{
OAuth1Authenticator authenticator = OAuth1Authenticator.ForAccessToken(consumerKey: Credential.consumer_key,
consumerSecret: Credential.consumer_secret,
token: Credential.access_token, tokenSecret: Credential.access_token_secret, signatureMethod: RestSharp.Authenticators.OAuth.OAuthSignatureMethod.HmacSha256);
authenticator.Realm = Credential.accountId;
return authenticator;
}
對於任何了解 NetSuite SuiteTalk REST API 的人,我正在嘗試使用此端點執行 POST 請求以將 PO 轉換為 VendorBill:.netsuite host url]/purchaseOrder/{id}/!transform/vendorBill
嘗試
var client = new RestClient(urlString);
var request = new RestRequest(Method.POST);
順便說一句,檢查你的 oauth 方法,當你生成簽名時你必須指定你正在使用的方法(“POST”)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.