Невозможно воссоздать этот запрос почтальона в веб-интерфейсе C # - unsupported_grant_type - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь заново создать запрос почтальона в C #.Ниже приведен снимок экрана с запросом почтальона, который работает:

(заголовок application/json) enter image description here

и C #, который не работает:

[HttpGet]
[Route("GenerateAccessToken")]
[ProducesResponseType(typeof(bool), (int)HttpStatusCode.OK)]
[ProducesResponseType(typeof(bool), (int)HttpStatusCode.BadRequest)]
[ProducesResponseType(typeof(bool), (int)HttpStatusCode.InternalServerError)]
public async Task<ActionResult<AccessTokenResponse>> GenerateAccessToken()
{
    var client = new HttpClient();

    MultipartFormDataContent clientData = new MultipartFormDataContent
    {
        { new StringContent("[Removed]"), "client_id" },
        { new StringContent("[Removed]"), "client_secret" },
        { new StringContent("client_credentials"), "grant_type" },
    };

    try
    {
        var responseObject = new AccessTokenResponse();
        var response = await client.PostAsync(AccessTokenEndpoint, clientData);
        var responseString = await response.Content.ReadAsStringAsync();

        if (response.IsSuccessStatusCode)
        {
            responseString = await response.Content.ReadAsStringAsync();
            responseObject = JsonConvert.DeserializeObject<AccessTokenResponse>(responseString);

            return Ok(responseObject);
        }

        return StatusCode(400, responseObject);
    }
    catch (Exception ex)
    {
        Logger.Log(ex);
        return StatusCode(500, false);
    }
}

Ответ из кода C #:

{"error":"unsupported_grant_type","error_description":"Use \"authorization_code\" or \"refresh_token\" or \"client_credentials\" or \"urn:ietf:params:oauth:grant-type:jwt-bearer\" as the grant_type.","error_uri":"https://developer.salesforce.com/docs"}

Я очень смущен тем, что мне не хватает.У меня явно есть grant_type.Однако независимо от того, что я установил для grant_type, я получаю то же сообщение об ошибке, которое указано выше.Я подозревал, что это может быть связано с content-type.При действительном запросе в Почтальоне я щелкнул код -> затем cURL, и он дал мне следующее:

curl -X POST \
  https://[removed].auth.marketingcloudapis.com/v2/token \
  -H 'Content-Type: application/json' \
  -H 'Postman-Token: f469a34a-194e-44b4-82aa-c5d46a1528f7' \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -F client_id=[removed] \
  -F client_secret=[removed] \
  -F grant_type=client_credentials

Я попытался добавить отсутствующие заголовки в свой запрос, выполнив это (чуть выше блока try):

clientData.Headers.TryAddWithoutValidation("Content-Type", "application/json");
clientData.Headers.TryAddWithoutValidation("Content-type", "multipart/form-data");
//clientData.Headers.TryAddWithoutValidation("Content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");

Но затем меня встретили с ошибкой 500 ответов (если у меня application/json и multipart/form-data) и Unsupported Media Type, если у меня просто application/json

Я полностьюв тупик здесь.Есть идеи, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...