#httpwebrequest #dotnet-httpclient #system.net.httpwebrequest #hawkauthentication
Вопрос:
У меня есть проект, в котором использовалась аутентификация Hawk. Существует библиотека с открытым исходным кодом под названием Thinktecture.Идентификационная модель.Ястреб. Для отправки запроса используется метод PostAsync HttpClient. Мне нужно удалить метод PostAsync и использовать какой-то синхронный код. Пройдя через Интернет, я нашел несколько статей об использовании HttpWebRequest, но я не знаю, как использовать эквивалентный код HttpClient, особенно для Hawk, который я могу передать в HttpClientFactory.Создайте метод в случае HttpClient. Пожалуйста, помогите.
private void MethodToPost()
{
using (var client = HttpClientFactory.Create(new HawkValidationHandler(CreateHawkHeader())))
{
client.BaseAddress = new Uri(API_BASE_URL);
MultipartFormDataContent form = new MultipartFormDataContent();
byte[] fileContent = System.IO.File.ReadAllBytes("myfile.pdf");
var httpFileContent = new ByteArrayContent(fileContent);
httpFileContent.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
form.Add(httpFileContent, "FileContent", "myfile");
foreach (var parameter in parameters) // these are my parameters
{
form.Add(new StringContent(parameter.Value), parameter.Key);
}
HttpResponseMessage response = await client.PostAsync(API_BASE_URL urlPostPath, form);
if (response.IsSuccessStatusCode)
{
jobID = await response.Content.ReadAsAsync<string>();
}
}
}
private ClientOptions CreateHawkHeader()
{
var credential = new Credential()
{
Id = My user id,
Algorithm = SupportedAlgorithms.SHA256,
User = "abc",
Key = "my api key"
};
var options = new ClientOptions()
{
CredentialsCallback = () => credential,
RequestPayloadHashabilityCallback = (r) => true,
NormalizationCallback = (req) =>
{
string name = "X-Request-Header-To-Protect";
return req.Headers.ContainsKey(name) ?
name ":" req.Headers[name].First()
: null;
}
};
return options;
}