首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Trustpilot OAuth Restful :无法PostAsync

Trustpilot OAuth Restful :无法PostAsync
EN

Stack Overflow用户
提问于 2016-06-13 16:04:51
回答 1查看 1.5K关注 0票数 1

我正在尝试使用Trustpilot API,发布评论产品的邀请函。

正如您在下面的代码中所看到的,我已经成功地完成了身份验证步骤,但是我无法成功地将数据发布到Trustpilot邀请API。PostAsnyc方法似乎被WaitingForActivation状态卡住了。我想知道你有没有什么建议可以帮上忙。

下面是我的代码(这里的API凭据不是真的!):

代码语言:javascript
复制
using (HttpClient httpClient = new HttpClient())
{
    string trustPilotAccessTokenUrl = "https://api.trustpilot.com/v1/oauth/oauth-business-users-for-applications/accesstoken";

    httpClient.BaseAddress = new Uri(trustPilotAccessTokenUrl);

    httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded"));

    var authString = "MyApiKey:MyApiSecret";

    httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Base64Encode(authString));

    var stringPayload = "grant_type=password&username=MyUserEmail&password=MyPassword";

    var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/x-www-form-urlencoded");

    HttpResponseMessage httpResponseMessage = httpClient.PostAsync(trustPilotAccessTokenUrl, httpContent).Result;

    var accessTokenResponseString = httpResponseMessage.Content.ReadAsStringAsync().Result;

    var accessTokenResponseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(accessTokenResponseString);

    // Create invitation object
    var invitation = new ReviewInvitation
    {
        ReferenceID = "inv001",
        RecipientName = "Jon Doe",
        RecipientEmail = "Jon.Doe@comp.com",
        Locale = "en-US"
    };

    var jsonInvitation = JsonConvert.SerializeObject(invitation);

    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("token", accessTokenResponseObject.AccessToken);

    var invitationsUri = new Uri("https://invitations-api.trustpilot.com/v1/private/business-units/{MyBusinessID}/invitations");

    // This here as a status of WaitingForActivation!
    var a = client.PostAsync(invitationsUri, new StringContent(jsonInvitation)).ContinueWith((postTask) => postTask.Result.EnsureSuccessStatusCode());
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-16 12:03:32

我就是这样解决这个问题的:

代码语言:javascript
复制
    // Serialize our concrete class into a JSON String
    var jsonInvitation = JsonConvert.SerializeObject(invitationObject);

    // Wrap our JSON inside a StringContent which then can be used by the HttpClient class
    var stringContent = new StringContent(jsonInvitation);


    // Get the access token
    var token = GetAccessToken().AccessToken;

    // Create a Uri 
    var postUri = new Uri("https://invitations-api.trustpilot.com/v1/private/business-units/{BusinessUnitID}/invitations");


    // Set up the request
    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, postUri);
    request.Content = stringContent;
    request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
    request.Content.Headers.Add("token", token);

     // Set up the HttpClient
    var httpClient = new HttpClient();
    //httpClient.DefaultRequestHeaders.Accept.Clear();
    //httpClient.BaseAddress = postUri;
    //httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    //httpClient.DefaultRequestHeaders.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-US"));

    var task = httpClient.SendAsync(request);

    task.Wait();

下面这个问题很有帮助:如何设置HttpClient请求的内容类型标头?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37794399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档