Проверка возможности возобновления с помощью метода HttpWebRequest

Это код, который я использую:

private bool CheckPartialDL(String url)
{
    HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(url);
    hwr.Method = "HEAD";
    hwr.AddRange(0);

    try
    {
        HttpWebResponse hwbresp = (HttpWebResponse)hwr.GetResponse();
        if (hwbresp.StatusCode == HttpStatusCode.PartialContent)
        {
            hwbresp.Close();
            return true;
        }

    }//end of try

    catch (WebException wbe)
    {
        MessageBox.Show(wbe.Message, "Error");
    }//end of catch

    return false;

}//end of Check

Но сервер вернул следующую ошибку:

Удаленный сервер вернул ошибку: (416) запрошенный диапазон неудовлетворителен.

Я собираюсь загрузить следующую форму файла:

http://windowsclient.net/sitefiles/1000/wpf/videos/source-code/creatingavideoapp-part1.zip

когда я использовал IDM для проверки возможности возобновления, idm показал, что она доступна.

Итак, где я ошибаюсь в представленном коде?


person amir    schedule 03.09.2012    source источник
comment
Незначительная проблема, но к вашему сведению: WebRequest является частью .NET, а не частью C#.   -  person John Saunders    schedule 03.09.2012


Ответы (2)


Вот ссылка, которая имеет некоторую информацию

http://www.checkupdown.com/status/E416.html

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

Допустим, файл имеет размер 1500 байт. Вы должны установить диапазон примерно от 150 до 324. И, конечно, диапазон не должен быть больше 1500 :)

Поэтому я думаю, что вы не предоставляете ему подходящий диапазон данных для извлечения.

Подробнее, проверьте этот вопрос по ссылке, он указывает диапазон байтов HTTP-запрос с несколькими диапазонами

person Dinesh    schedule 03.09.2012

Я знаю, что этому вопросу уже пару лет, но у меня была точно такая же проблема (и аналогичный код), и проблема, похоже, заключается в том, что вы не можете иметь как «Метод = 'HEAD'», так и AddRange() как удаление вызов AddRange работает нормально.

Изменить. Этот post подтверждает это:

«Сервер должен игнорировать поле заголовка Range, полученное с помощью метода запроса, отличного от GET»

person La bétonneuse    schedule 19.11.2014