VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > C#教程 >
  • c#提交数据到服务器并返回处理

制作者:剑锋冷月 单位:无忧统计网,www.51stat.net
 

  1:利用System.Net.WebRequest的Create方法创建WebRequest对象:

  System.Net.WebRequestObjWebRequest=System.Net.WebRequest.Create(urlP);

  异常类型:

  NotSupportedException:requestUri中指定的请求方案未注册。

  ArgumentNullException:requestUri为空引用(VisualBasic中为Nothing)。

  SecurityException调用方没有连接到请求的URI或请求重定向到的URI上的权限。

  2:对请求进行预先身份验证,如果无明确的要求,此项可以空.

  ObjWebRequest.Credentials=CredentialCache.DefaultCredentials;

  如果需要按照特别的验证协议,需要强制转换成HttpWebRequest类型:

  ((HttpWebRequest)ObjWebRequest).UserAgent="5DO8";

  3:指明协议的类型:

  ObjWebRequest.Method="POST";

  可以是POST方式和Get方式.

  4:发送传输的数据长度(如果无显示传送,亦可发送),如果设置了此项,发送的数据必须恰好满足此值.

  ObjWebRequest.ContentLength=Stringdata.ToCharArray().Length;

  5:设置传入请求的MIME内容类型:

ObjWebRequest.ContentType="application/x-www-form-urlencoded";//Post
ObjWebRequest.ContentType="text/xml";//SOAP

  6:使用GetRequestStream()方法获取发送的流的句柄:

  System.IO.StreamdataStream=ObjWebRequest.GetRequestStream();

  7:发送数据:

  dataStream.Write(byteArray,0,byteArray.Length);

  注:byteArray是一个Byte数组,它的获取可以是:

  byte[]byteArray=UTF8Encoding.GetBytes(dataP);

  8:关闭Request流.

 

  dataStream.Close();

  这是必须的,知道Close,服务器不会响应输出,还可以选择调用System.IO.Stream.Close()关闭流.

  9:利用GetResponse()获取Response对象.

  WebResponseObjresponse=ObjWebRequest.GetResponse();

  9*:你可以获取返回给客户端的HTTP输出状态的字符串,默认是公共状态消息"OK"

//Console.WriteLine(((HttpWebResponse)Objresponse).StatusDescription);
if(((HttpWebResponse)Objresponse).StatusDescription!="OK"){
//..结束这一切
}

  10:获取响应流的句柄:

  Streamdata=Objresponse.GetResponseStream

  11:保存数据或者直接读出,例如直接输出到浏览器.

dataStream=ObjResponse.GetResponseStream();
StreamReaderr=newStreamReader(dataStream);
Response.Write(HttpUtility.HtmlEncode(r.ReadToEnd()));

  或者使用StreamWriter对象保存:

StreamoutStream=System.IO.File.Create("Temp.data");
byte[]buffer=newbyte[1024];
intl;
do{
l=dataStream.Read(buffer,0,buffer.Length);
if(l>0)outStream.Write(buffer,0,l);
}while(l>0);
outStream.Close();

  此方式可以保存二进制数据.

  12:关闭流.

  Objresponse.Close();

  例如发送Soap文件时候,可以创建XmlDocument对象,直接使用Save()即可:

XmlDocumentdoc=newXmlDocument();
doc.Load(System.Web.HttpContext.Current.Server.MapPath(@"~")+@""+xmlfile);
HttpWebRequestreq=(HttpWebRequest)WebRequest.Create(@"http://s:81/5do8/webs.asmx");
req.ContentType="text/xml;charset="utf-8"";
req.Accept="text/xml";
req.Method="POST";
Streamstm=req.GetRequestStream();
doc.Save(stm);
stm.Close();
WebResponseresp=req.GetResponse();
stm=resp.GetResponseStream();
StreamReaderr=newStreamReader(stm);
Response.Write(HttpUtility.HtmlEncode(r.ReadToEnd()));

 

  -1:利用ASP发送XMLHTTP对象:

Setxmlhttp=server.CreateObject("Msxml2.XMLHTTP")
xmlhttp.Open"POST",url,false
xmlhttp.setRequestHeader"Content-Type","text/xml;charset=utf-8"
xmlhttp.setRequestHeader"HOST","s"
xmlhttp.setRequestHeader"Content-Length",LEN(SoapRequest)
xmlhttp.setRequestHeader"SOAPAction","http://s"
xmlhttp.Send(SoapRequest)
Response.Writexmlhttp.Status&””
Response.Writexmlhttp.StatusText
Setxmlhttp=Nothing

  获取的时候:

Ifxmlhttp.Status=200Then
SetxmlDOC=server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
xmlStr=xmlDOC.xml
SetxmlDOC=nothing
xmlStr=Replace(xmlStr,"<","<")
xmlStr=Replace(xmlStr,">",">")
Response.writexmlStr
Else
Response.Writexmlhttp.Status&""
Response.Writexmlhttp.StatusText
Endif

  请求正确则给出完整响应,请求不正确(如账号,密码不对)响应的内容就会信息不完整.

  取出响应里的数据,如下:

Ifxmlhttp.Status=200Then
SetxmlDOC=server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
Response.WritexmlDOC.documentElement.selectNodes("//LoginByAccountResult")(0).text
SetxmlDOC=nothing
Else
Response.Writexmlhttp.Status&""
Response.Writexmlhttp.StatusText
Endif

 

  显示某节点各个属性和数据的FUNCTION:

Functionshowallnode(rootname,myxmlDOC)
ifrootname<>""then
setnodeobj=myxmlDOC.documentElement.selectSingleNode("//"&rootname&"")'当前结点对像
nodeAttributelen=myxmlDOC.documentElement.selectSingleNode("//"&rootname&"").attributes.length'当前结点属性数
returnstring=returnstring&"<BR>节点名称:"&rootname
ifnodeobj.text<>""then
returnstring=returnstring&"<BR>节点的文本:("&nodeobj.text&")"
endif
returnstring=returnstring&"<BR>{<BR>"
ifnodeAttributelen<>0then
returnstring=returnstring&"<BR>属性数有 "&nodeAttributelen&"个,分别是:"
endif
fori=0tonodeAttributelen-1
returnstring=returnstring&"<li>"&nodeobj.attributes(i).Name&":"&nodeobj.getAttribute(nodeobj.attributes(i).Name)&"</li>"
next
ifnodeobj.childNodes.Length<>0then
ifnodeobj.hasChildNodes()andlcase(nodeobj.childNodes.item(0).nodeName)<>"#text"then'是否有子节点
setchildnodeobj=nodeobj.childNodes
childnodelen=nodeobj.childNodes.Length
returnstring=returnstring&"<BR><BR>有"&childnodelen&"个子节点;<BR>分别是:"
fori=0tochildnodelen-1
returnstring=returnstring&"<li>"&childnodeobj.item(i).nodeName&"</li>"
next
endif
endif
returnstring=returnstring&"<BR>}<BR>"
response.writereturnstring
setnodeobj=nothing
endif
EndFunction
可以这样用:
Ifxmlhttp.Status=200Then
SetxmlDOC=server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
showallnode"LoginByAccountResponse",xmlDOC’调用SHOWALLNODE
SetxmlDOC=nothing
Else
Response.Writexmlhttp.Status&""
Response.Writexmlhttp.StatusText
Endif

 

  POST:

url="http://s/"
SoapRequest="username="&username&"&password="&password
Setxmlhttp=server.CreateObject("Msxml2.XMLHTTP")
xmlhttp.Open"POST",url,false
xmlhttp.setRequestHeader"Content-Type","application/x-www-form-urlencoded"’注意
xmlhttp.setRequestHeader"HOST","
"
xmlhttp.setRequestHeader"Content-Length",LEN(SoapRequest)
xmlhttp.Send(SoapRequest)
Response.Writexmlhttp.Status&””
Response.Writexmlhttp.StatusText
Setxmlhttp=Nothing
'POST
Ifxmlhttp.Status=200Then
SetxmlDOC=server.CreateObject("MSXML.DOMDocument")
xmlDOC.load(xmlhttp.responseXML)
showallnode"string",xmlDOC'调用SHOWALLNODE
SetxmlDOC=nothing
Else
Response.Writexmlhttp.Status&""
Response.Writexmlhttp.StatusText
Endif

 

 

  dataStream.Close();

  这是必须的,知道Close,服务器不会响应输出,还可以选择调用System.IO.Stream.Close()关闭流.

  9:利用GetResponse()获取Response对象.

  WebResponseObjresponse=ObjWebRequest.GetResponse();

  9*:你可以获取返回给客户端的HTTP输出状态的字符串,默认是公共状态消息"OK"

//Console.WriteLine(((HttpWebResponse)Objresponse).StatusDescription);
if(((HttpWebResponse)Objresponse).StatusDescription!="OK"){
//..结束这一切
}

  10:获取响应流的句柄:

  Streamdata=Objresponse.GetResponseStream

  11:保存数据或者直接读出,例如直接输出到浏览器.

dataStream=ObjResponse.GetResponseStream();
StreamReaderr=newStreamReader(dataStream);
Response.Write(HttpUtility.HtmlEncode(r.ReadToEnd()));

  或者使用StreamWriter对象保存:

StreamoutStream=System.IO.File.Create("Temp.data");
byte[]buffer=newbyte[1024];
intl;
do{
l=dataStream.Read(buffer,0,buffer.Length);
if(l>0)outStream.Write(buffer,0,l);
}while(l>0);
outStream.Close();

  此方式可以保存二进制数据.

  12:关闭流.

  Objresponse.Close();

  例如发送Soap文件时候,可以创建XmlDocument对象,直接使用Save()即可:

XmlDocumentdoc=newXmlDocument();
doc.Load(System.Web.HttpContext.Current.Server.MapPath(@"~")+@""+xmlfile);
HttpWebRequestreq=(HttpWebRequest)WebRequest.Create(@"http://s:81/5do8/webs.asmx");
req.ContentType="text/xml;charset="utf-8"";
req.Accept="text/xml";
req.Method="POST";
Streamstm=req.GetRequestStream();
doc.Save(stm);
stm.Close();
WebResponseresp=req.GetResponse();
stm=resp.GetResponseStream();
StreamReaderr=newStreamReader(stm);
Response.Write(HttpUtility.HtmlEncode(r.ReadToEnd()));



相关教程