Я вызвал API Blackboard Learn для загрузки файла. URL-адрес
https://blackboard.ddns.net/learn/api/public/v1/courses/uuid:d23e128e62f8483699c26836e06cab32/contents/_27_1/attachments/_13_1/download
Когда я щелкнул по ссылке в браузере, я увидел, что есть еще 2 302 Найдено до того, как содержимое будет отображено в браузере.
https://blackboard.ddns.net/learn/api/public/v1/courses/uuid:d23e128e62f8483699c26836e06cab32/contents/_27_1/attachments/_13_1/download
Код статуса: 302
https://blackboard.ddns.net/bbcswebdav/xid-1407_1?VxJw3wfC56=1553768183&Kq3cZcYS15=6716bb2d5bc740c29eb11e01d75bc913&3cCnGYSz89=LhqjIQu9ReJ6IaoXzfPALpMer7momaz%2BwYxyWPG3YFY%3D
Код статуса: 302
https://blackboard.ddns.net/bbcswebdav/courses/1001/Blackboard%20code.txt?VxJw3wfC56=1553767343&Kq3cZcYS15=6716bb2d5bc740c29eb11e01d75bc913&3cCnGYSz89=uSziSDgibsV8PoWygH4spxpX7lOdDGwAvtlIHvrbPxM%3D
Код статуса: 200
Я попытался на Почтальоне , отправив токен на предъявителя и запросил GET-запрос для вызова метода, и он также получил содержимое.
Мне нужно написать код C # для получения содержимого файла, но я не получаю файл, а получаю 500 InternalServerError. Я пытался решить проблему, но не повезло. Есть ли у вас какие-либо мысли по этому поводу? Пожалуйста, помогите.
Мой код в консольном приложении C # выглядит следующим образом:
static void Main(string[] args)
{
//GET /learn/api/public/v1/courses/{courseId}/contents/{contentId}/attachments/{attachmentId}/download
string fileUrl = "/learn/api/public/v1/courses/uuid:d23e128e62f8483699c26836e06cab32/contents/_27_1/attachments/_13_1/download";
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri("https://blackboard.ddns.net/");
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "avnPkfmWSnf2Y5aKf1497LahLD3eKuwn");
byte[] result = null;
HttpResponseMessage response = client.GetAsync(fileUrl).Result;
if (response.IsSuccessStatusCode)
{
result = response.Content.ReadAsByteArrayAsync().Result;
}
}
}
После прочтения сообщения Как я могу заставить System.Net.Http.HttpClient не выполнять перенаправления 302? , я попытался выполнить перенаправления 302 и изменить код, как показано ниже, но получил те же 500 InternalServerError в конце.
static void Main(string[] args)
{
//GET /learn/api/public/v1/courses/{courseId}/contents/{contentId}/attachments/{attachmentId}/download
string fileUrl = "/learn/api/public/v1/courses/uuid:d23e128e62f8483699c26836e06cab32/contents/_27_1/attachments/_13_1/download";
HttpClientHandler clientHander = new HttpClientHandler();
clientHander.AllowAutoRedirect = false;
using (HttpClient client = new HttpClient(clientHander))
{
client.BaseAddress = new Uri("https://blackboard.ddns.net/");
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "avnPkfmWSnf2Y5aKf1497LahLD3eKuwn");
byte[] result = null;
HttpResponseMessage response = client.GetAsync(fileUrl).Result;
if (response.StatusCode == System.Net.HttpStatusCode.Found)
{
var locaton = response.Headers.Location.AbsoluteUri;
HttpResponseMessage secondResponse = client.GetAsync(locaton).Result;
if (secondResponse.StatusCode == System.Net.HttpStatusCode.Found)
{
string finalUrl = secondResponse.Headers.Location.OriginalString;
HttpResponseMessage thirdResponse = client.GetAsync(finalUrl).Result;
result = thirdResponse.Content.ReadAsByteArrayAsync().Result;
Console.Write(Encoding.UTF8.GetString(result));
}
}
}
}