public async Task <bool> SendFeedbackAsync(FeedbackTeacherModel model) { try { Dictionary <string, string> formData = new Dictionary <string, string>() { ["__VIEWSTATE"] = model.__ViewState, ["__VIEWSTATEGENERATOR"] = model.__VIEWSTATEGENERATOR, ["__EVENTVALIDATION"] = model.__EVENTVALIDATION, ["ctl00$ContentPlaceHolder1$reload$ctl00$chkList"] = model.FeedbackChoice[0].ToString(), ["ctl00$ContentPlaceHolder1$reload$ctl01$chkList"] = model.FeedbackChoice[1].ToString(), ["ctl00$ContentPlaceHolder1$reload$ctl02$chkList"] = model.FeedbackChoice[2].ToString(), ["ctl00$ContentPlaceHolder1$reload$ctl03$chkList"] = model.FeedbackChoice[3].ToString(), ["ctl00$ContentPlaceHolder1$reload$ctl04$chkList"] = model.FeedbackChoice[4].ToString(), ["ctl00$ContentPlaceHolder1$reload$ctl05$chkList"] = model.FeedbackChoice[5].ToString(), ["ctl00$ContentPlaceHolder1$txtComment"] = model.Comment, ["ctl00$ContentPlaceHolder1$btSendFeedback"] = "Gửi ý kiến" }; HttpWebRequest req = WebRequest.CreateHttp($"{FschoolDomain}{model.ID}"); req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; _acct.AddSessionIdCookie(req); using (var reqStream = await req.GetRequestStreamAsync()) { using (var urlEncoded = new FormUrlEncodedContent(formData)) { await urlEncoded.CopyToAsync(reqStream); var test = await urlEncoded.ReadAsStringAsync(); } using (var resp = await req.GetResponseAsync()) { using (var stream = resp.GetResponseStream()) { using (var reader = new StreamReader(stream)) { string res = await reader.ReadToEndAsync(); if (await AccountModel.IsLoginPage(res)) { throw new InvalidSessionIDException($"{_acct.Email} session id: {_acct.SessionID} is invalid or expired, please request a new one and try again"); } // Validate feedback HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(res); return(doc.DocumentNode.SelectSingleNode("/html/body/div/div[1]/section[2]/form/div/div/div/div[3]/div/div[1]/span/font") != null); } } } } } catch (InvalidSessionIDException) // We don't wrap this exception { throw; } catch (Exception e) { throw new InvalidOperationException("Failed to send feedback", e); } }