由于HttpWebRequest已经过时的事实,我正在升级到.NET6中的等同版本.
我不明白为什么我会收到一辆未经授权的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 Framework4.x代码正常工作.因为我们要将代码迁移到.NET6,所以必须重写.
显然,我做错了什么--我似乎就是想不出我错过了什么.
如有任何帮助,我们不胜感激.提前谢谢您.
Edit:03/29/2023 - including correct code as provided by answer below..
private static async Task UploadCsvFileAsyncV2(string authToken)
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(uploadUrl);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authToken);
client.DefaultRequestHeaders
.Accept
.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
using (var request = new HttpRequestMessage(HttpMethod.Post, "uploads"))
{
request.Headers.Add("api-version", "1");
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
{
{ headerContent, "metadata", csvFileName }
};
request.Content = content;
var response = await client.SendAsync(request);
}
}
}