如何在ASP.NET中以程序方式模拟HTTP POST?
|
我需要在程序上模拟一个HTTP POST,也就是说,我需要用一些POST变量生成一个Request,然后将它发送到一个页面. 要澄清一点,我需要模拟一个常规POST的行为,而不是以整体的方式进行编程.所以基本上我需要填写一个请求,就像Post POST表单一样,填写一个Request,然后将浏览器发送到期望POST的页面. 解决方法这是一种方法.您可以以NameValueCollection的形式发送此方法的url和name / value参数.该方法在端点上创建一个Http Post,并将其作为字符串返回. 当然,这取决于什么/为什么你这样做,这个方法将被称为多少次,还有其他的选择.但是,直到您提供有关您的具体需求的更多信息,这种方法是足够好的. 下面的方法使用Tasks(.NET 4.0)和异步方法,所以如果你在一个循环中进行多个调用,它将比下一个代码列表中的同步方法更快. static string GetWebResponse(string url,NameValueCollection parameters)
{
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Method = "POST";
var sb = new StringBuilder();
foreach (var key in parameters.AllKeys)
sb.Append(key + "=" + parameters[key] + "&");
sb.Length = sb.Length - 1;
byte[] requestBytes = Encoding.UTF8.GetBytes(sb.ToString());
httpWebRequest.ContentLength = requestBytes.Length;
using (var requestStream = httpWebRequest.GetRequestStream())
{
requestStream.Write(requestBytes,requestBytes.Length);
requestStream.Close();
}
Task<WebResponse> responseTask = Task.Factory.FromAsync<WebResponse>(httpWebRequest.BeginGetResponse,httpWebRequest.EndGetResponse,null);
using (var responseStream = responseTask.Result.GetResponseStream())
{
var reader = new StreamReader(responseStream);
return reader.ReadToEnd();
}
}
你也可以使用WebClient(它比较简单).此方法期望post参数作为表单中的字符串 name1=value1&name2=value2&name3=value3 所以如果你使用这个方法一定要传递你的参数,或者修改实现就像上面的代码. static string HttpPost(string url,string Parameters)
{
var req = System.Net.WebRequest.Create(url);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = System.Text.Encoding.ASCII.GetBytes(Parameters);
req.ContentLength = bytes.Length;
System.IO.Stream os = req.GetRequestStream ();
os.Write (bytes,bytes.Length);
os.Close ();
System.Net.WebResponse resp = req.GetResponse();
if (resp== null)
return null;
var sr = new StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 注销后,如果浏览器返回按钮,那么它返回最后
- asp.net-mvc – 什么时候应该在asp.net mvc中使用部分视图?
- asp.net-mvc – SQL Azure得到一个错误’已经有一个打开的D
- 围绕ASP.NET会话跨多个选项卡窗口共享的方式
- 如何单元测试我的asp.net-mvc控制器的OnActionExecuting方法
- asp.net – 在PreRender上添加控件页面
- asp.net – 如果页面上有异常,则输出缓存无效
- asp.net – 在web-farm网站上将machineKey添加到web.config
- asp.net-mvc – ASP.NET MVC快速启动 – 一站式教程?
- asp.net – TableHeaderRow类的重点是什么
- 用于ASP.NET的web api – 如何构建对象流
- asp.net – 如何在一个新的选项卡中打开asp:Hyp
- asp.net-mvc – visual studio 2013“添加控制器
- asp.net-mvc – Microsoft.Owin.Security.IAuthe
- asp.net-mvc – 如何使用MVC控制器返回JSON
- 如何在Asp.Net identity 2中手动检查密码?
- asp.net-mvc – 为什么被赋予NoValidate属性?
- asp.net – 如何在占位符中的动态生成的标签之间
- asp.net-mvc-3 – 如何使用ModelMetadata单元测试
- asp.net – 用于分析在azure上运行的网站性能的步
