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