C# .net core POST-запрос
Я пытаюсь настроить вход в систему через Oauth2, используя систему единого входа EvE online в ядре.net, и считаю, что это невозможно на этапе отправки запроса. Вот так я бы сделал это в прошлом со стандартным.net. Кто-нибудь может помочь мне преобразовать это?
byte[] encodedKey = Encoding.UTF8.GetBytes(clientId + ":" + clientSecret);
//
HttpWebRequest request = HttpRequestHelper.CreateRequest(new Uri("https://login.eveonline.com/oauth/token"));
request.Host = Host;
request.Headers.Add("Authorization", "Basic " + encodedKey);
request.Method = "POST";
HttpRequestHelper.AddPostData(request, "grant_type=authorization_code&code=" + code);
string response = await requestAsync(request).ConfigureAwait(false);
var result = JsonConvert.DeserializeObject<AuthResponse>(response);
return result;
ps это формат почтового запроса, который я ищу
POST https://login.eveonline.com/oauth/token HTTP/1.1
Authorization: Basic bG9...ZXQ=
Content-Type: application/x-www-form-urlencoded
Host: login.eveonline.com
grant_type=authorization_code&code=gEyuYF_rf...ofM0
2 ответа
Я написал модуль для EVEOnline SSO, в.net core 1.1 я использую HttpClient для отправки запроса
private readonly HttpClient _client;
public async Task<SsoResponse> AuthenticateAsync(string code)
{
if (string.IsNullOrEmpty(code))
throw new ArgumentNullException("Authentication code is null or empty");
// Build the link to the SSO we will be using.
var builder = new UriBuilder(_settings.BaseUrl)
{
Path = _settings.TokenPath,
Query = $"grant_type=authorization_code&code={code}"
};
var request = new HttpRequestMessage()
{
RequestUri = builder.Uri,
Method = HttpMethod.Post
};
// Set the necessary headers
request.Headers.Add("Authorization", $"{TokenType.Basic} {_authorizationString}");
request.Headers.Add("Host", builder.Host);
request.Headers.Add("User-Agent", _userAgent);
return await CallSsoAsync<SsoResponse>(request);
}
private async Task<T> CallSsoAsync<T>(HttpRequestMessage request)
{
T response = default(T);
using (HttpResponseMessage resp = await _client.SendAsync(request))
{
// Check whether the SSO answered with
// a positive HTTP Status Code
if (resp.IsSuccessStatusCode)
{
// Deserialize the object into the response model
// which will be returned to the application
response = JsonConvert.DeserializeObject<T>(await resp.Content.ReadAsStringAsync());
}
else
{
// Invalid code receieved, inform the user
throw new Exception("The SSO responded with a bad status code: " + resp.StatusCode);
}
}
return response;
}
Взгляните на http://restsharp.org/. У них также есть пакет nuget для ядра.net https://www.nuget.org/packages/RestSharp.NetCore/.
Использование довольно похоже на ваш пример.