Remote Post utility
If you want to do an http post from code behind eg. to redirect to payment page it is sometimes useful to have an helper to be used throughout your application. Below is the simple class that does it’s job.
public class RemotePost { private NameValueCollection Inputs = new NameValueCollection(); public string Url = ""; public string Method = "post"; public string FormName = "form1"; public void Add(string name, string value) { Inputs.Add(name, value); } public void Post() { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Write(@"<html><head><meta http-equiv=""Content-Type"" content=""text/html; charset=iso-8859-1"">"); HttpContext.Current.Response.Write(String.Format(@"</head><body onload=""document.{0}.submit()"">", FormName)); HttpContext.Current.Response.Write(String.Format(@"<form name=""{0}"" method=""{1}"" action=""{2}"" >", FormName, Method, Url)); int i = 0; while (i < Inputs.Keys.Count) { HttpContext.Current.Response.Write(String.Format(@"<input name=""{0}"" type=""hidden"" value=""{1}"">", Inputs.Keys[i], Inputs[Inputs.Keys[i]])); i += 1; } HttpContext.Current.Response.Write("</form>"); HttpContext.Current.Response.Write("</body></html>"); HttpContext.Current.Response.End(); } }
When using it you simply add your parameters in the button click event before doing post request.
public void btnPay_OnClick(object sender, EventArgs e) { RemotePost myremotepost = new RemotePost(); myremotepost.FormName = "form1"; myremotepost.Method = "post"; myremotepost.Url = "https://......."; myremotepost.Add("id", "123"); //..... //---- ///////////////////////// myremotepost.Post(); }
An alternative way to that is sample below. You may also want to set PostBackUrl of the clicked button to avoid user to see response page.
public void Post() { string url = "post url"; using (StringBuilder postData = new StringBuilder()) { postData.Append("first_name=" + HttpUtility.UrlEncode(txtFirstName.Text) + "&"); postData.Append("last_name=" + HttpUtility.UrlEncode(txtLastName.Text)); //TO DO - do it for all Form Elements ////////////////////////////// StreamWriter writer = null; using (HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url)) { request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = postData.ToString().Length; try { writer = new StreamWriter(request.GetRequestStream()); writer.Write(postData.ToString()); } finally { if (writer != null) writer.Close(); } } } Response.Redirect("RedirectPage"); }