Я пытаюсь написать обработчик ASP.NET http со следующей целью: при поступлении запросов выполните некоторые проверки параметров, найдите URL-адрес в базе данных, зарегистрируйте запрос и, если все в порядке, перешлитезапрос (или вернуть файл в ответ).
Это почти прямо вперед.Проблема заключается в том, что запрос является частичным HTTP-запросом (он включает заголовок диапазона), и клиент ожидает частичного ответа.Я пытаюсь использовать server.transfer для того, чтобы перенести запрос в правильный файл.Примерно так:
public class Redirecter : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
//Check stuff
............
if( everyThingOk )
{
context.Server.Transfer("/Temp/the/file");
}
else
{
//respond with some error
}
}
........
}
Проблема в том, что передача не соответствует исходным заголовкам запроса.У меня нет обработчика или чего-либо другого, установленного для URL-адреса, на который я перенаправляю запрос, поэтому я просто ожидаю, что это будет обычная загрузка файла.Но так как исходный запрос включает заголовок Range, я ожидаю, что ответ будет частичным, но это , а не .
Запрос:
GET /Some/file HTTP/1.1
Range:bytes=0-4999 <----only want 5000 bytes
Ответ:
HTTP/1.1 200 OK <-------- what? Expected 206!
Server:ASP.NET Development Server/10.0.0.
Date:Tue, 06 Sep 2011 09:21:07 GMT
X-AspNet-Version:4.0.30319
Cache-Control:private
Content-Type:text/html
Content-Length:79051 <----- too large, only expected 5000 bytes max
Connection:Close
И мне также не хватает заголовка Content-Range.Таким образом, кажется, что заголовок потерян в передаче?
Мне НЕ НУЖНО делать перевод, это был просто то, что я думал, был самый простой способ сделать это.
Как сделатьЯ делаю «перевод» правильно, поэтому я уважаю частичный запрос?