Проблема Viewstate с запросом на отправку данных Multipart / Form - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь отправить текстовое значение в форму с запросом на отправку данных multipart / form и получаю значение viewstate из моего метода get. Но когда я отправляю этот почтовый запрос, сервер возвращает мне это сообщение об ошибке;

"ViewStateException: недопустимое состояние просмотра. [HttpException (0x80004005): проверка состояния просмотра MA C не удалась. Если это приложение размещено с помощью веб-фермы или кластера, убедитесь, что в конфигурации указан один и тот же ключ проверки и алгоритм проверки. AutoGenerate нельзя использовать в кластере. "

это мой основной код;

            string viewState;
        string viewStateGenerator;
        string eventValidation;
        string source;
        var boundary = DateTime.Now.Ticks.ToString("x");
        var boundary2 = "----WebKitFormBoundary" + boundary;
        MultipartFormDataContent content = new MultipartFormDataContent(boundary2);            

        string source2 = await HttpMethods.Get(url, referer, cookies);
        viewState = HtmlParser.FindHtmlValue(source2, "//*[@id=\"__VIEWSTATE\"]");
        viewStateGenerator = HtmlParser.FindHtmlValue(source2, "//*[@id='__VIEWSTATEGENERATOR']");

        Multipart.MultipartCreator(content, viewState, "\"__VIEWSTATE\"");
        Multipart.MultipartCreator(content, viewStateGenerator, "\"__VIEWSTATEGENERATOR\"");
        Multipart.MultipartCreator(content, "1", "\"ctl00$hIlk\"");
        Multipart.MultipartCreator(content, "on", "\"ctl00$ContentPlaceHolder1$grdSurecKayit$ctl02$cbSec\"");
        Multipart.MultipartCreator(content, "1", "\"ctl00$ContentPlaceHolder1$grdSurecKayit$ctl02$ddlAboneTipi\"");
        Multipart.MultipartCreator(content, "2019", "\"ctl00$ContentPlaceHolder1$grdSurecKayit$ctl02$txtEsasYil\"");
        Multipart.MultipartCreator(content, "2023", "\"ctl00$ContentPlaceHolder1$grdSurecKayit$ctl02$txtEsasNo\"");
        Multipart.MultipartCreator(content, "55", "\"ctl00$ContentPlaceHolder1$ddlMerci\"");
        Multipart.MultipartCreator(content, "Save", "\"ctl00$ContentPlaceHolder1$btnSurecKaydet\"");
        Multipart.MultipartCreator(content, "0", "\"ctl00$ContentPlaceHolder1$ddlSuresiGectiMiAra\"");
        Multipart.MultipartCreator(content, "-1", "\"ctl00$ContentPlaceHolder1$ddlListe\"");

        source =await HttpMethods.PostMultiPartForm(url2, referer2, cookies, content);

это мой метод HtmlParse для получения значения состояния просмотра из последнего запроса на получение;

public static string FindHtmlValue(string source, string xPath)
    {
        HtmlDocument doc = new HtmlDocument();
        doc.LoadHtml(source);
        HtmlNode item = doc.DocumentNode.SelectSingleNode(xPath);
        string itemValue = item.Attributes["value"].Value;
        return itemValue;
    }

и это мой код метода публикации;

public static async Task<string> PostMultiPartForm(string url, string referer, CookieContainer cookies, MultipartFormDataContent content)
    {

        HttpClientHandler handler = new HttpClientHandler();
        handler.CookieContainer = cookies;
        handler.AllowAutoRedirect = true;
        HttpClient client = new HttpClient(handler);
        client.DefaultRequestHeaders.Add("Referer", referer);
        HttpResponseMessage response = await client.PostAsync(url, content);

        return (await response.Content.ReadAsStringAsync());
    }

Это мой метод MultipartFormCreator;

       public static void MultipartCreator(MultipartFormDataContent content,  string value, string name)
    {
        StringContent stringContent = new StringContent(value);
        content.Add(stringContent, name);

    }

После запуска этого кода тело формы моего запроса выглядит так:

------WebKitFormBoundary8d7f3cb5ae5991f
Content-Type: text/plain; charset=utf-8
Content-Disposition: form-data; name="__VIEWSTATE"

5ufuqAkp7eQEvA7KmBskVpNcr83vCztlMS1FjElsdR/aCkzJtK/CjbfxchWNyDCDsWG3wL4SZZZ99EfDZD/LQpHLtJEIYUOWWFS8xiiqXqFnR6jQFuesRcjsmi2O/Nf9

И это данные тела почтового запроса, которые берутся из скрипта (я пытаюсь выполнить этот процесс вручную и отслеживать трафик c от скрипачей);

------WebKitFormBoundaryKXT6pYoAevqq9UmT
Content-Disposition: form-data; name="__VIEWSTATE"

r63HuFpdyiTcPy3UaarCCjLNr/0vxKDKA9Kn5VynuoXBooAxDIc9onEtJwDTEH3ASQjeVL9oMb9+KZHOjZ15xY4mTsSaFYObgEGaFejIWsKpc+y0s4uG1UwQDD8OirXk

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

Спасибо за ответы. С уважением.

...