Я пытаюсь заново создать запрос почтальона в C #.Ниже приведен снимок экрана с запросом почтальона, который работает:
(заголовок application/json
)
и 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
Я полностьюв тупик здесь.Есть идеи, что я делаю не так?