Ошибка при аутентификации REST API с помощью C#
Я пытаюсь пройти аутентификацию в веб-службе REST API и получить токен доступа носителя, который позже буду использовать для выполнения запросов к определенным ресурсам. В конце концов, я хочу сделать это в.NET MVC framework. В целях тестирования я создал образец консольного приложения, но программа просто завершает работу при запуске с ошибкой в строке response = await client.PostAsync("Token", requestParams).ConfigureAwait(false); //ОШИБКА
Вот образец, с которым я работаю. Мне удалось получить токен доступа с помощью почтальона.
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
namespace test
{
class Program
{
static void Main(string[] args)
{
Program prm = new Program();
prm.InvokeMethod();
}
public async void InvokeMethod()
{
using (var client = new HttpClient())
{
// Setting Base address.
client.BaseAddress = new Uri("https://test.com/api/oauth/token");
// Setting content type.
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Initialization.
HttpResponseMessage response = new HttpResponseMessage();
List<KeyValuePair<string, string>> allIputParams = new List<KeyValuePair<string, string>>();
allIputParams.Add(new KeyValuePair<string, string>("client_id", "ID_dfdhfdjkhfdkfdfjkdfjdkfjd"));
allIputParams.Add(new KeyValuePair<string, string>("client_secret", "djfhdskfjhskdjhfksdhjkxcklcfkdjf"));
allIputParams.Add(new KeyValuePair<string, string>("grant_type", "client_credentials"));
// Convert Request Params to Key Value Pair.
// URL Request parameters.
HttpContent requestParams = new FormUrlEncodedContent(allIputParams);
// HTTP POST
response = await client.PostAsync("Token", requestParams).ConfigureAwait(false); //ERROR
// Verification
if (response.IsSuccessStatusCode)
{
// Reading Response.
}
}
}
}
}
Update- This worked using RestSharp
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using RestSharp;
using Newtonsoft.Json.Linq;
namespace test
{
class Program
{
static void Main(string[] args)
{
Program prm = new Program();
prm.InvokeMethod();
}
public void InvokeMethod()
{
var client = new RestClient("https://test/api/oauth/token");
var request = new RestRequest(Method.POST);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddHeader("authorization", "Bearer <access_token>");
request.AddParameter("application/x-www-form-urlencoded", "grant_type=client_credentials&client_id=fsdfsdfdsf&client_secret=dfdsfsdfds", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var jObject = JObject.Parse(response.Content);
if (response.IsSuccessful)
{
//Console.WriteLine(response.Content);
// Let us print the variable to see what we got
Console.WriteLine("received from Response " + jObject.GetValue("access_token"));
}
}
}
Мне удалось успешно пройти аутентификацию с помощью Java, и я не могу понять, что вызывает ошибку в программе C#. Это потому, что client_id, client_secret не передаются в теле?
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class NewClass {
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body = RequestBody.create(mediaType, "grant_type=client_credentials&client_id=ID_dfdgdfgfdgfgfgf&client_secret=dgfgfdgffgfhghg");
Request request = new Request.Builder()
.url("https://test/api/oauth/token")
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
Response response = client.newCall(request).execute();
System.out.println(response);
}
}
}