簡體   English   中英

NetSuite OAUTH1 POST 請求在 Postman 中有效,但在 Restsharp 中失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM