由于 HttpWebRequest 已过时,我正在升级到 .NET 6 中的等效项。
我不明白为什么我会收到未经授权的 401。我可以成功获得不记名令牌,但我似乎无法找到正确的组合来成功上传文件。
private static async Task UploadCsvFileAsync(string authToken)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://subdomain.domain.com/");
client.DefaultRequestHeaders
.Accept
.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
using (var request = new HttpRequestMessage())
{
request.RequestUri = new Uri(uploadUrl);
request.Method = HttpMethod.Post;
request.Headers.Add("api-version", "1");
request.Headers.Add("Authorization", $"Bearer {authToken}");
string header = $"{Environment.NewLine}--{formBoundary}{Environment.NewLine}" +
$"Content-Disposition: form-data; name=\"csvfile\"; filename=\"{csvFileName}\"{Environment.NewLine}" +
$"Content-Type: text/csv{Environment.NewLine}{Environment.NewLine}";
byte[] headerBytes = Encoding.UTF8.GetBytes(header);
var headerContent = new StreamContent(new MemoryStream(headerBytes));
headerContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
var content = new MultipartFormDataContent();
content.Add(headerContent, "metadata", csvFileName);
var response = await client.PostAsync(uploadUrl, content);
// the response code is 401 - Unauthorized
}
}
}
我正在运行 .NET Framework 4.x 代码。由于我们要将代码迁移到 .NET 6,因此必须重写它。
显然我做错了什么——我似乎无法弄清楚我错过了什么。
非常感谢任何帮助。提前谢谢你。
你没有正确使用
HttpClient
。请注意您是如何声明 HttpRequestMessage
的 - 您在其中添加了 auth 标头 - 但从未真正使用过它?您有点将旧方法与新方法混合在一起,而不是实际发送身份验证令牌。
如果你想使用
HttpRequestMessage
,这很好,只需使用 HttpClient.SendAsync
并提供消息。具体在byte[] headerBytes = Encoding.UTF8.GetBytes(header);
之后试试这个:
request.Headers.Add("Content-Type", "application/octet-stream");
var content = new MultipartFormDataContent();
content.Add(new StreamContent(new MemoryStream(headerBytes)), "metadata", csvFileName);
request.Content = content;
var response = await client.SendAsync(request);