Невозможно привести объект типа «System.Net.HttpWebRequest» к типу «System.Net.FileWebRequest». - PullRequest
1 голос
/ 21 января 2011

Я пытаюсь загрузить файл с сервера с FileWebRequest. Но я получаю ошибку:

Способ загрузки здесь:

public string HttpFileGetReq(Uri uri, int reqTimeout, Encoding encoding)
{
    try
    {
        string stringResponse;
        var req = (FileWebRequest)WebRequest.Create(uri);
        req.Timeout = reqTimeout;
        req.Method = WebRequestMethods.File.DownloadFile;

        var res = (FileWebResponse)req.GetResponse();

        //using (var receiveStream = res.GetResponseStream())
        //using (var readStream = new StreamReader(receiveStream,encoding))
        //{
        //    stringResponse = readStream.ReadToEnd();
        //}

        return stringResponse="0K";
    }
    catch (WebException webException)
    {
        throw webException;
    }
}

Использование здесь:

public dynamic LoadRoomMsg(IAccount account, string roomId)
{
    try
    {
        string uri = string.Format("http://www-pokec.azet.sk/_s/chat/nacitajPrispevky.php?{0}&lok={1}&lastMsg=0&pub=0&prv=0&r=1295633087203&changeroom=1" , account.SessionId, roomId);

        var htmlStringResult = HttpFileGetReq(new Uri(uri), ReqTimeout, EncodingType);

        //var htmlStringResult = _httpReq.HttpGetReq(new Uri(string.Format("{0}{1}?{2}&lok=", PokecUrl.RoomMsg,account.SessionId,roomId)),
        //    ReqTimeout, account.Cookies, EncodingType);
        if (!string.IsNullOrEmpty(htmlStringResult))
        {
            return true;
        }
        return false;
    }
    catch (Exception exception)
    {
        throw exception;
    }
}

URL-адрес файла здесь .

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

Ответы [ 4 ]

1 голос
/ 21 января 2011

Вместо того, чтобы реализовывать свои собственные веб-потоки, позвольте .NET Framework сделать все это за вас с помощью WebClient, например:

string uri = string.Format(
    "http://www-pokec.azet.sk/_s/chat/nacitajPrispevky.php?{0}&lok={1}&lastMsg=0&pub=0&prv=0&r=1295633087203&changeroom=1",
    account.SessionId,
    roomId);

System.Net.WebClient wc = new System.Net.WebClient();
string webData = wc.DownloadString(uri);

...parse the webdata response here...

Просмотр ответа с размещенного вами URL-адреса:

{"reason":0}

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

1 голос
/ 21 января 2011

Ваш URL (http: // ...) создаст запрос HttpWebRequest. Вы можете проверить с помощью отладчика.

Форма MSDN :

Класс FileWebRequest реализует абстрактный базовый класс WebRequest для Унифицированные идентификаторы ресурсов (URI) которые используют схему file: // для запроса локальные файлы.

Обратите внимание на локальные файлы file:// и .

Совет. Просто используйте класс WebClient.

0 голосов
/ 21 января 2011

FileWebRequest для file:// протоколов. Поскольку вы используете http:// url, вы хотите использовать HttpWebRequest.

public string HttpFileGetReq(Uri uri, int reqTimeout, Encoding encoding)
{
    string stringResponse;
    var req = (HttpWebRequest)WebRequest.Create(uri);

    req.Timeout = reqTimeout;

    var res = (HttpWebResponse)req.GetResponse();

    using (var receiveStream = res.GetResponseStream())
    {
        using (var readStream = new StreamReader(receiveStream,encoding))
        {
            return readStream.ReadToEnd();
        }
    }
}
0 голосов
/ 21 января 2011

Измените FileWebRequest и FileWebResponse на HttpWebRequest и HttpWebResponse.

Неважно, что то, что вы скачиваете, может быть файлом; Что касается .NET Framework, вы просто извлекаете страницу с веб-сайта.

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