Пустые заголовки ответов, полученные из WebAPI

#javascript #reactjs #asp.net-web-api #http-headers

#javascript #reactjs #asp.net-web-api #http-заголовки

Вопрос:

Я использую ASP.NET WebAPI с приложением ReactJS на передней панели, я создаю метод Get для загрузки файла с сервера, и я пытаюсь установить как тип содержимого, так и длину содержимого в заголовках ответа :

         var result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(new MemoryStream(bytes));
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        result.Content.Headers.ContentLength = bytes.Length;
  

Когда я вызываю этот метод из приложения ReactJS, используя метод выборки, как показано ниже:

     await fetch(`someservice/${clientid}/download/${fileName}`, { responseType: "arraybuffer" })
    .then((response) => {
        const reader = response.body.getReader();

        //get total length
        const contentLength = response.headers.get('Content-Length');
        console.log(response.headers);

        //read the data
        let receivedLength = 0; // received that many bytes at the moment
        let chunks = []; // array of received binary chunks (comprises the body)
        while (true) {
            const { done, value } = reader.read();

            if (done) {
                break;
            }
            console.log(value);
            chunks.push(value);
            receivedLength  = value.length;

            console.log(`Received ${receivedLength} of ${contentLength}`)
        }

        //concatenate chunks into single Uint8Array
        let chunksAll = new Uint8Array(receivedLength);
        let position = 0;
        for (let chunk of chunks) {
            chunksAll.set(chunk, position);
            position  = chunk.length;
        }
    });
  

Я получил ответ без заголовков типа содержимого и длины содержимого:

Вывод на консоль

Но разве Content-Type и Content-Length не являются допустимыми заголовками?

Ответ №1:

заголовки ответов в fetch api JavaScript был реализован как итератор, а не объект, вы можете попробовать ниже, чтобы получить доступ к заголовкам :-

   for (var header of respone.headers.entries()) {
                    console.log(header);
                } 
  

каждый элемент заголовка в цикле будет представлять собой массив строк, где первый элемент является ключом, а второй элемент — значением.