Аутентификация ястреба в HttpWebRequest или аналогичная для синхронной публикации

#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;
        }