httpwebrequest - HttpWebRequest 中的 Hawk 身份验证或类似的同步 POST
问题描述
我有一个使用 Hawk 身份验证的项目。有一个名为Thinktecture.IdentityModel.Hawk的开源库。使用 HttpClient 的 PostAsync 方法发布请求。我必须删除 PostAsync 方法并且需要使用一些同步代码。通过互联网,我找到了几篇使用 HttpWebRequest 的文章,但我不知道如何使用 HttpClient 等效代码,尤其是对于 Hawk,我可以在 HttpClient 的情况下传递HttpClientFactory.Create方法。请帮忙。
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;
}
解决方案
推荐阅读
- asp.net - AspNetZero - 用户索引视图缩略图问题
- css - html有序列表属性“start”和“type”在外部css中不起作用
- javascript - 参数设置为默认值的函数在 Internet Explorer 中不起作用,但在 Firefox 中运行良好
- git - 致命:无法访问“https://github.com/xxx”:LibreSSL SSL_connect:SSL_ERROR_SYSCALL 连接到 github.com:443
- javafx - 如何在表格视图中显示最后一条记录?
- excel - 如何将行自动复制到新工作表 VBA Excel
- regex - 如何在 Notepad++ 中用 GETDATE() 字符串替换 to_timestamp('some value')?
- python - 在 django 模板中将一些文本替换为粗体
- javascript - Redux Form:带有多个提交按钮的条件表单验证
- javascript - 使用 javascript 和 c# 打印 pos 收据