System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(url)); request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; request.KeepAlive = false; byte[] buffer; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { for (int i = 0; i < data.Count; i++) { buffer = encoding.GetBytes(data.Keys[i]); if (i > 0) ms.WriteByte(Convert.ToByte('&')); ms.Write(buffer, 0, buffer.Length); ms.WriteByte(Convert.ToByte('=')); buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i])); ms.Write(buffer, 0, buffer.Length); } buffer = ms.ToArray(); }
报错:String 引用没有设置为 String 的实例。
data是什么东东?
如果servervariables的话,data.keys[i]和data[i]即便在data.count的范围内,也是不能保证一定有值的。
对于这个现象我也一直很奇怪,只是没去研究。
public static string PostDataToUrl(string url, System.Text.Encoding encoding, System.Collections.Specialized.NameValueCollection data) { //设置HttpWebRequest System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(url)); request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST"; request.KeepAlive = false; byte[] buffer; using (System.IO.MemoryStream ms = new System.IO.MemoryStream()) { for (int i = 0; i < data.Count; i++) { buffer = encoding.GetBytes(data.Keys[i]); if (i > 0) ms.WriteByte(Convert.ToByte('&')); ms.Write(buffer, 0, buffer.Length); ms.WriteByte(Convert.ToByte('=')); buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i])); ms.Write(buffer, 0, buffer.Length); } buffer = ms.ToArray(); } request.ContentLength = buffer.Length; using (System.IO.Stream requestStream = request.GetRequestStream()) { requestStream.Write(buffer, 0, buffer.Length); requestStream.Close(); } try { //获取数据 using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)(request.GetResponse())) using (System.IO.Stream stream = response.GetResponseStream()) using (System.IO.StreamReader reader = new System.IO.StreamReader(stream, encoding)) { string result = reader.ReadToEnd(); reader.Close(); stream.Close(); response.Close(); return result; } } finally { request.Abort(); } }
data是方法传的值。。。。
@混沌战士: 你调用这个方法时传递的是什么值呢?这个才是关键。问题就按照我前面说的测试下。
@519740105:
private void BindApplist(int pageindex) { NameValueCollection param = new NameValueCollection(); param.Add("action", "8"); param.Add("pageindex", pageindex+""); param.Add("pagesize", AspNetPager1.PageSize+""); param.Add("cateid", Request.QueryString["cateid"]); param.Add("boardsid", Request.QueryString["boardsid"]); string result = WebUtils.PostDataToUrl(_interfaceUrl, Encoding.UTF8, param); if (!string.IsNullOrEmpty(result)) { result = StringHelper.ConvertUnicode2Chinese(result); JObject obj = (JObject)JsonConvert.DeserializeObject(result); var state = TypeHelper.TryParse(obj["state"].ToString(), -1); if (state == 0) { JArray jar = (JArray)obj["data"]; this.AspNetPager1.RecordCount = TotalCount(); lstApps.DataSource = jar; lstApps.DataBind(); } } }
调试到buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i]));就报错了。。。。。。
@混沌战士: 就是因为data[i]是一个null值。对这个值做个检测,为null时跳过(也包括data.keys[i]),问题就完美解决了。
@519740105: 跳过是跳过了,但是结果根本出不来
我加的代码是 if (data[i] != null)
{ buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i])); }
@混沌战士: 结果出不来那就要检查其它问题了。
@519740105: 应该是data[i]没有取到值,,,http://localhost:61076/list.aspx?cateid=501&catename=%E7%B3%BB%E7%BB%9F%E5%B7%A5%E5%85%B7这样的就取不到
http://localhost:61076/list.aspx?cateid=501&boardsid=board_100_011&boardname=%E5%AE%89%E5%85%A8&catename=%E7%B3%BB%E7%BB%9F%E5%B7%A5%E5%85%B7这样就能取到,,,郁闷的很啊
@混沌战士:
param.Add("cateid", Request.QueryString["cateid"]);
param.Add("boardsid", Request.QueryString["boardsid"]);
这两段,是可能没有数据的,所以你的程序会报告错误。
下面代码:
buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i]));
ms.Write(buffer, 0, buffer.Length);
当data[i]为空的时候就跳过。
@519740105: 厉害啊,,,,解决了
只有第一句url跟string有关系了
url是配置了一个访问服务器上的一般处理程序文件的路径。。。。。。。。
哪里爆出的错误?
buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i]));
这里的代码,String 引用没有设置为 String 的实例。
@混沌战士: data是个什么玩意儿? 哪里来的?确定有值吗?
@江湖再见: 我在上面贴的有代码,,,,问题现在已经解决了,,,,,http://www.mysjtu.com/page/M0/S948/948052.html不知道你研究过这没有。。。。。。
老哥,我也有这个问题,和你的byte[] buffer = Encoding.Unicode.GetBytes(jsonDatas);你的是怎么解决的啊
今天遇到了这个问题,看了一下大佬的回答,就是没有获取到值才报错。
我的决解方法是加了判断它是否为null 为null就不执行,不为null就执行