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