首页 新闻 会员 周边

String 引用没有设置为 String 的实例。

0
[已解决问题] 解决于 2014-09-26 13:45
 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 的实例。
混沌战士的主页 混沌战士 | 初学一级 | 园豆:171
提问于:2014-09-26 09:38
< >
分享
最佳答案
0

data是什么东东?

如果servervariables的话,data.keys[i]和data[i]即便在data.count的范围内,也是不能保证一定有值的。

对于这个现象我也一直很奇怪,只是没去研究。

奖励园豆:5
519740105 | 大侠五级 |园豆:5810 | 2014-09-26 10:02
 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是方法传的值。。。。
混沌战士 | 园豆:171 (初学一级) | 2014-09-26 10:09

@混沌战士: 你调用这个方法时传递的是什么值呢?这个才是关键。问题就按照我前面说的测试下。

519740105 | 园豆:5810 (大侠五级) | 2014-09-26 10:25

@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]));就报错了。。。。。。

混沌战士 | 园豆:171 (初学一级) | 2014-09-26 10:30

@混沌战士: 就是因为data[i]是一个null值。对这个值做个检测,为null时跳过(也包括data.keys[i]),问题就完美解决了。

519740105 | 园豆:5810 (大侠五级) | 2014-09-26 10:31

@519740105: 跳过是跳过了,但是结果根本出不来

我加的代码是 if (data[i] != null)
                    { buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i])); }

混沌战士 | 园豆:171 (初学一级) | 2014-09-26 10:45

@混沌战士: 结果出不来那就要检查其它问题了。

519740105 | 园豆:5810 (大侠五级) | 2014-09-26 10:58

@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这样就能取到,,,郁闷的很啊

混沌战士 | 园豆:171 (初学一级) | 2014-09-26 11:04

@混沌战士: 

            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 | 园豆:5810 (大侠五级) | 2014-09-26 11:13

@519740105: 厉害啊,,,,解决了

混沌战士 | 园豆:171 (初学一级) | 2014-09-26 11:23
其他回答(4)
0

只有第一句url跟string有关系了

隔壁老王来了 | 园豆:99 (初学一级) | 2014-09-26 10:02

url是配置了一个访问服务器上的一般处理程序文件的路径。。。。。。。。

支持(0) 反对(0) 混沌战士 | 园豆:171 (初学一级) | 2014-09-26 10:12
0

哪里爆出的错误?

甲_乙_丙_丁 | 园豆:804 (小虾三级) | 2014-09-26 11:14

buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i]));

这里的代码,String 引用没有设置为 String 的实例。

支持(0) 反对(0) 混沌战士 | 园豆:171 (初学一级) | 2014-09-26 11:17

@混沌战士: data是个什么玩意儿? 哪里来的?确定有值吗?

支持(0) 反对(0) 甲_乙_丙_丁 | 园豆:804 (小虾三级) | 2014-09-26 11:25

@江湖再见: 我在上面贴的有代码,,,,问题现在已经解决了,,,,,http://www.mysjtu.com/page/M0/S948/948052.html不知道你研究过这没有。。。。。。

支持(0) 反对(0) 混沌战士 | 园豆:171 (初学一级) | 2014-09-26 11:29
0

老哥,我也有这个问题,和你的byte[] buffer = Encoding.Unicode.GetBytes(jsonDatas);你的是怎么解决的啊

日行二善 | 园豆:222 (菜鸟二级) | 2017-10-19 20:53
0

今天遇到了这个问题,看了一下大佬的回答,就是没有获取到值才报错。

 

我的决解方法是加了判断它是否为null 为null就不执行,不为null就执行

永远跟党走i | 园豆:1519 (小虾三级) | 2018-03-25 10:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册