NetSuite OAUTH1 POST请求在Postman中有效,但在Restsharp中失败



我在中使用RestSharp。NET 6在c#控制台应用程序中执行对NetSuite的POST请求。我正在使用基于令牌的身份验证和OAuth1

当我在C#中使用相同的凭据(使用者密钥、使用者机密、访问令牌、访问令牌机密和领域(执行请求时,对于GET请求,它是有效的。我可以进行身份验证并得到响应。

当我在C#中尝试POST时,我得到一个401,"未授权",并显示一条错误消息,说明令牌被拒绝。然而,具有相同身份验证值和URL的相同POST请求在Postman中可以工作。

我觉得Postman正在以与Restsharp不同的方式对身份验证标头进行处理,但这仍然不能解释为什么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主机url]/purchaseOrder/{id}/!转换/卖方票据

尝试

var client = new RestClient(urlString);    
var request = new RestRequest(Method.POST);

顺便说一句,检查你的oauth方法,当你生成签名时,你必须指定你正在使用的方法("POST"(

最新更新