Я должен отметить, что я использую Google Chrome для своего браузера (Google Chrome, похоже, не заботится о типах MIME, когда он видит звук, он пытается использовать его, как в проигрывателе HTML5), но этотакже применимо, если вы пытаетесь разместить мультимедийный контент на странице.
В любом случае, я проверял свои заголовки с помощью fiddler и заметил, что Chrome передает 3 запроса на сервер.Я начал играть с другими браузерами и заметил, что они этого не делают, но в зависимости от браузера и того, что я жестко запрограммировал как тип MIME, я либо получу страницу сумасшедшего текста, либо загрузку файла.
При дальнейшей проверке я заметил, что Chrome сначала запросит файл.Затем запросите файл еще раз с несколькими разными заголовками, особенно с заголовком диапазона.Первый с байтом = 0, затем следующий с другим размером в зависимости от размера файла (в зависимости от размера файла может быть сделано более 3 запросов).
Итак, возникла проблема.Chrome сначала запросит файл.Однажды увидев тип, он отправил бы другой запрос, который, как мне кажется, ищет размер файла (byte = 0-), затем другой, запрашивающий вторую половину файла или что-то подобное, чтобы обеспечить своего рода потоковую передачу при использованииHTML5.Я быстро что-то кодировал для обработки типов MIME и бросил страницу HTML5 вместе со звуковым компонентом и обнаружил, что другие браузеры также делают это (кроме IE)
Так что вот быстрое решение, и я больше не получаю эти ошибки
string range = context.Request.Headers["Range"];
int rangeBegin = 0;
int rangeEnd = msg.Length;
if (range != null)
{
string[] byteRange = range.Replace("bytes=", "").Split('-');
Int32.TryParse(byteRange[0], out rangeBegin);
if (byteRange.Length > 1 && !string.IsNullOrEmpty(byteRange[1]))
{
Int32.TryParse(byteRange[1], out rangeEnd);
}
}
context.Response.ContentLength64 = rangeEnd - rangeBegin;
using (Stream s = context.Response.OutputStream)
{
s.Write(msg, rangeBegin, rangeEnd - rangeBegin);
}