ArgumentOutOfRangeException,指定的参数已超出有效的值的范围 一直出现这个异常,该怎么解决 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 net_lover 于 2012-06-12 13:31:34 编辑 public string PostWebRequests(string postURL, string paramData) { string ret = string.Empty; try { Encoding dataEncode = Encoding.UTF8; byte[] byteArray = dataEncode.GetBytes(paramData); HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postURL)); webReq.Timeout = 20000; webReq.ReadWriteTimeout = 20000; webReq.Method = "POST"; webReq.ContentType = "application/x-www-form-urlencoded;"; webReq.ContentLength = byteArray.Length; Stream newStream = webReq.GetRequestStream(); newStream.Write(byteArray, 0, byteArray.Length); //这句就出现那个异常 newStream.Close(); HttpWebResponse response = (HttpWebResponse)webReq.GetResponse(); StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); ret = sr.ReadToEnd(); sr.Close(); response.Close(); newStream.Close(); } catch (WebException) { ret = "0"; return ret; } return ret; }//检查更新 private void doWinForm() { string urlpost = GlobParams.baseURL + "login/getVersion.action"; //更新的地址 //发送的请求 OptBase opt = new OptBase(); string result = opt.PostWebRequests(urlpost, ""); MessageBox.Show("获取的版本号是:"+result); if (GetSerial.getLocVersion().CompareTo(result) < 0) { MessageBox.Show("检测到有新版本发布了,是否需要更新!", "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk ,MessageBoxDefaultButton.Button3); System.Diagnostics.Process.Start("update.exe", GlobParams.baseURL); Application.Exit(); } else //不更新就直接登陆 { Status ld = new Status(); ld.ShowDialog(); ld.Dispose(); } }代码,我做自动更新的 本帖最后由 net_lover 于 2012-06-12 13:38:06 编辑 paramData不是服务器地址是提交的参数,你调用的时候没写 异常是在newStream.Write(byteArray, 0, byteArray.Length); 调试到这句出现的我前面做了一单独的例子也是这样传的,正常运行没问题,放到项目里面就除这个问题 string result = opt.PostWebRequests(urlpost, "a=xxxxxxxxxx") private void LoginForm_Load(object sender, EventArgs e) { Thread picThread = new Thread(new ThreadStart(doUpdate)); picThread.IsBackground = true; picThread.Start(); } //检查更新 private void doUpdate() { //地址 string urlpost = GlobParam.baseURL + "login/getVersion.action"; //开始发送请求 HttpUtil httpUtil = new HttpUtil(); string result = httpUtil.PostWebRequest(urlpost, ""); if (GetSerial.getLocVersion().CompareTo(result) < 0) { System.Diagnostics.Process.Start("update.exe", GlobParam.baseURL); Application.Exit(); } }这个是例子里面的 就这样传没问题的 道理都是一样的,你看看HttpUtil httpUtil = new HttpUtil(); string result = httpUtil.PostWebRequest这里的代码跟你写的一样吗HttpUtil类的 PostWebRequest 单步看看byteArray值及长度 你没有传值,为0 是正常的,不是给你说了吗if(paramData.Length > 0){//再执行newStream.Write(byteArray, 0, byteArray.Length);} string result = httpUtil.PostWebRequest(urlpost, "");不需要参数 传空值就可以了 指定的参数已超出有效值的范围 参数名:length 还是这样问题 tableLayoutPanel1控件使用的问题 C#公司面试题,和基础感觉也很实用,分享下。顺便给自己打下分数 求助webBrowser获取网页代码 gridview多选 怎么获取被选中行中某一个字段的值? C#数组使用方法请教 关于Flexdatatree控件,怎么取得子表格中选择的行信息?? C#+SQL SERVER2005开发C/S系统备份到XML,再恢复到数据库的超典型问题 好象很难找到序列化的高手,我仅仅想实现ISerializable接口 用PrintDocument打印照片,为啥总是只能打出图片的一小部分 dataGrid中的删除 C#怎么把数据查出来了再进行分页啊 c#读txt文件的简单问题!!
{
string ret = string.Empty;
try
{
Encoding dataEncode = Encoding.UTF8;
byte[] byteArray = dataEncode.GetBytes(paramData);
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(postURL));
webReq.Timeout = 20000;
webReq.ReadWriteTimeout = 20000;
webReq.Method = "POST";
webReq.ContentType = "application/x-www-form-urlencoded;"; webReq.ContentLength = byteArray.Length;
Stream newStream = webReq.GetRequestStream();
newStream.Write(byteArray, 0, byteArray.Length); //这句就出现那个异常
newStream.Close();
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8); ret = sr.ReadToEnd(); sr.Close();
response.Close();
newStream.Close();
}
catch (WebException)
{
ret = "0";
return ret;
}
return ret;
}//检查更新
private void doWinForm()
{
string urlpost = GlobParams.baseURL + "login/getVersion.action"; //更新的地址
//发送的请求
OptBase opt = new OptBase();
string result = opt.PostWebRequests(urlpost, "");
MessageBox.Show("获取的版本号是:"+result);
if (GetSerial.getLocVersion().CompareTo(result) < 0)
{
MessageBox.Show("检测到有新版本发布了,是否需要更新!", "信息提示", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk ,MessageBoxDefaultButton.Button3);
System.Diagnostics.Process.Start("update.exe", GlobParams.baseURL);
Application.Exit();
}
else //不更新就直接登陆
{
Status ld = new Status();
ld.ShowDialog();
ld.Dispose();
}
}代码,我做自动更新的
调试到这句出现的
我前面做了一单独的例子也是这样传的,正常运行没问题,放到项目里面就除这个问题
{
Thread picThread = new Thread(new ThreadStart(doUpdate));
picThread.IsBackground = true;
picThread.Start();
} //检查更新
private void doUpdate() {
//地址
string urlpost = GlobParam.baseURL + "login/getVersion.action"; //开始发送请求
HttpUtil httpUtil = new HttpUtil();
string result = httpUtil.PostWebRequest(urlpost, "");
if (GetSerial.getLocVersion().CompareTo(result) < 0)
{
System.Diagnostics.Process.Start("update.exe", GlobParam.baseURL);
Application.Exit();
}
}
这个是例子里面的 就这样传没问题的
你看看
HttpUtil httpUtil = new HttpUtil();
string result = httpUtil.PostWebRequest这里的代码跟你写的一样吗HttpUtil类的 PostWebRequest
不是给你说了吗
if(paramData.Length > 0)
{
//再执行
newStream.Write(byteArray, 0, byteArray.Length);
}
不需要参数 传空值就可以了