как переслать запрос с сохранением оригинальных заголовков - PullRequest
1 голос
/ 06 сентября 2011

Я пытаюсь написать обработчик 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.Таким образом, кажется, что заголовок потерян в передаче?

Мне НЕ НУЖНО делать перевод, это был просто то, что я думал, был самый простой способ сделать это.

Как сделатьЯ делаю «перевод» правильно, поэтому я уважаю частичный запрос?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Возможно, вы захотите прочитать эти заголовки из запроса;создать веб-запрос с ними;Пример:

            HttpWebRequest httpWebRequest = HttpWebRequest.Create("absolutepath") as HttpWebRequest;
            httpWebRequest.Headers["Content_Length"] = this.Request.ServerVariables["Content_Length"];
            httpWebRequest.Headers["Content_Range"] = this.Request.ServerVariables["Content_Range"];

            // Create expects absolute path..
            // you might have to build an absolute path location for the temp file
            HttpWebResponse response =  httpWebRequest.GetResponse() as HttpWebResponse; 
0 голосов
/ 06 сентября 2011

Почему бы вам не вызвать обработчик запросов Asp.Net напрямую?Это HttpApplication?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...