Как опубликовать на asp.net проверочную страницу с C # и прочитать ответ - PullRequest
0 голосов
/ 05 февраля 2012

Я пишу свой собственный гусеничный продукт. Теперь есть веб-сайт по продаже товаров, который использует данные постов для страниц. Мне действительно нужно иметь возможность размещать данные и читать ответ. Но они используют проверку asp.net, и это так запутано. Я действительно не мог понять, как правильно размещать данные и читать. Я использую htmlagilitypack. Если есть возможность опубликовать данные с помощью htmlagilitypack и прочитать ответ, это будет действительно здорово.

Теперь это пример страницы: http://www.hizlial.com/HizliListele.aspx?CatID=482643

Когда вы открыли страницу, посмотрите на класс "urun_listele"

Там вы увидите варианты

20 Ürün Listele
40 Ürün Listele
60 Ürün Listele
Tümünü Listele

Эти цифры являются счетчиками продуктов, которые будут отображаться. Tümünü listele означает список всех продуктов. Теперь мне действительно нужно опубликовать данные и получить все продукты этой категории. Я использовал Firebug для отладки и попытался написать код ниже, но я все еще получил количество продуктов по умолчанию

        private void button11_Click(object sender, RoutedEventArgs e)
    {
        StringBuilder srBuilder = new StringBuilder();
        AppendPostParameter(srBuilder, "ctl00$ContentPlaceHolder1$cmbUrunSayi", "full");    
        srBuilder = srBuilder.Replace("&", "", srBuilder.Length - 1, 1);
        byte[] byteArray = Encoding.UTF8.GetBytes(srBuilder.ToString());
        HttpWebRequest hWebReq = (HttpWebRequest)WebRequest.Create("http://www.hizlial.com/HizliListele.aspx?CatID=482643");
        hWebReq.Method = "POST";
        hWebReq.ContentType = "application/x-www-form-urlencoded";

        using (Stream requestStream = hWebReq.GetRequestStream())
        {
            requestStream.Write(byteArray, 0, byteArray.Length);
        }
        HtmlDocument hd = new HtmlDocument();

        using (HttpWebResponse response = (HttpWebResponse)hWebReq.GetResponse())
        {
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {              
                var htmlstring = sr.ReadToEnd();
            }
        }
    }

    static private void AppendPostParameter(StringBuilder sb, string name, string value)
    {
        sb.AppendFormat("{0}={1}&", name, HttpUtility.UrlEncode(value));
    }

После того, как я получу данные, я загружу их в htmlagilitypack HtmlDocument

Любая помощь приветствуется.

C # 4.0, приложение wpf, htmlagiltiypack

1 Ответ

1 голос
/ 05 февраля 2012

ASP .Net использует поля __EVENTTARGET и __EVENTARGUMENT для имитации поведения Windows Forms.Чтобы смоделировать событие изменения в выпадающем списке на сервере, необходимо добавить в поле формы запрос, чтобы они были __EVENTTARGET как 'ctl00 $ ContentPlaceHolder1 $ cmbUrunSayi' и __EVENTARGUMENT как ''.

Если вы посмотрите код обменакомбо и метод __doPostBack вы поймете о чем я.Вы можете вставить код ниже после вашего объявления srBuilder.Этот код будет работать.

AppendPostParameter(srBuilder,  "__EVENTTARGET", "ctl00$ContentPlaceHolder1$cmbUrunSayi"); 
AppendPostParameter(srBuilder, "__EVENTARGUMENT", string.Empty); 

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

...