ASP.NET XmlHttp跨域訪問實現(xiàn)代碼
更新時間:2008年11月10日 11:47:05 作者:
最近項目需要實現(xiàn)XmlHttp的POST方法到另一服務器上的頁面進行數(shù)據(jù)的更新,可是IE會提出“該頁正在訪問其控制范圍之外的信息,是否繼續(xù)?”等警告信息,而在其他瀏覽器上直接禁止掉,GOOGLE一下原來是XmlHttp的跨域訪問問題,找了很多資料,說是提供很多解決方案,可是都沒有用處。
原來由于瀏覽器的安全限制,網(wǎng)絡連接的跨域訪問時不被允許的。我們不能在瀏覽器端直接使用AJAX來跨域訪問資源,但是在服務器端是沒有這種跨域安全限制的。所以,我們只需要讓服務器端幫我們完成“跨域訪問”的工作,然后直接獲取服務器端“跨域訪問”的結果就可以了。分享下我的解決辦法,希望能有所幫助。^_^
CertCheck.aspx:
using MSXML2;
namespace CA2
{
public partial class CertCheck : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request["resultid"] != null)
{
string s = Request["resultid"];
string[] result = s.Split('@');
Label1.Text = result[1];
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load("VBR.xml");
System.Xml.XmlElement RegNode = xmlDoc.CreateElement("Id");
RegNode.InnerText = result[0];
xmlDoc.DocumentElement.AppendChild(RegNode);
RegNode = xmlDoc.CreateElement("Serial");
RegNode.InnerText = result[1];
xmlDoc.DocumentElement.AppendChild(RegNode);
MSXML2.XMLHTTP xh = new MSXML2.XMLHTTPClass();
xh.open("POST", "http://222.19.211.119/CAProcess.aspx", false, null, null);
xh.setRequestHeader("Content-Type", "text/xml");
xh.setRequestHeader("Content-Type", "gb2312");
xh.send(xmlDoc.InnerXml);
if (xh.readyState == 4)
{
if (xh.status == 200)
{
Label1.Text += "###" + xh.responseText;
}
}
}
}
}
}
VBR.xml:
<?xml version="1.0"?>
<root>
</root>
PS: 在xh.send()中可以直接寫參數(shù),
CertCheck.aspx:
using System.Net;
using System.IO;
namespace CA2
{
public partial class CertCheck : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request["resultid"] != null)
{
string s = Request["resultid"];
string[] result = s.Split('@');
Label1.Text = result[1];
string param = "Id="+result[0]+"&Serial="+result[1];
byte[] bs = Encoding.ASCII.GetBytes(param);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://222.19.211.119/CAProcess.aspx");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(bs, 0, bs.Length);
reqStream.Close();
HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("GB2312"));
string content = reader.ReadToEnd();
reader.Close();
myResponse.Close();
Label1.Text += "###" + content.ToString();
}
}
}
}
CAProcess.aspx
protected void Page_Load(object sender, EventArgs e)
{
int Id = int.Parse(Request.Form["Id"]);
string Serial = Request.Form["Serial"];
//
Response.Write(Id.ToString()+" "+Serial);
Response.End();
}
CertCheck.aspx:
復制代碼 代碼如下:
using MSXML2;
namespace CA2
{
public partial class CertCheck : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request["resultid"] != null)
{
string s = Request["resultid"];
string[] result = s.Split('@');
Label1.Text = result[1];
System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
xmlDoc.Load("VBR.xml");
System.Xml.XmlElement RegNode = xmlDoc.CreateElement("Id");
RegNode.InnerText = result[0];
xmlDoc.DocumentElement.AppendChild(RegNode);
RegNode = xmlDoc.CreateElement("Serial");
RegNode.InnerText = result[1];
xmlDoc.DocumentElement.AppendChild(RegNode);
MSXML2.XMLHTTP xh = new MSXML2.XMLHTTPClass();
xh.open("POST", "http://222.19.211.119/CAProcess.aspx", false, null, null);
xh.setRequestHeader("Content-Type", "text/xml");
xh.setRequestHeader("Content-Type", "gb2312");
xh.send(xmlDoc.InnerXml);
if (xh.readyState == 4)
{
if (xh.status == 200)
{
Label1.Text += "###" + xh.responseText;
}
}
}
}
}
}
VBR.xml:
復制代碼 代碼如下:
<?xml version="1.0"?>
<root>
</root>
PS: 在xh.send()中可以直接寫參數(shù),
CertCheck.aspx:
復制代碼 代碼如下:
using System.Net;
using System.IO;
namespace CA2
{
public partial class CertCheck : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Request["resultid"] != null)
{
string s = Request["resultid"];
string[] result = s.Split('@');
Label1.Text = result[1];
string param = "Id="+result[0]+"&Serial="+result[1];
byte[] bs = Encoding.ASCII.GetBytes(param);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://222.19.211.119/CAProcess.aspx");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
req.ContentLength = bs.Length;
Stream reqStream = req.GetRequestStream();
reqStream.Write(bs, 0, bs.Length);
reqStream.Close();
HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.GetEncoding("GB2312"));
string content = reader.ReadToEnd();
reader.Close();
myResponse.Close();
Label1.Text += "###" + content.ToString();
}
}
}
}
CAProcess.aspx
復制代碼 代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
int Id = int.Parse(Request.Form["Id"]);
string Serial = Request.Form["Serial"];
//
Response.Write(Id.ToString()+" "+Serial);
Response.End();
}
您可能感興趣的文章:
相關文章
asp.net 獲取Datalist中Checkbox的值的小結
最近開發(fā)過程中遇到一個小問題,要獲取checkbox的值,在網(wǎng)上搜索了一下,發(fā)現(xiàn)基本上都是用JS實現(xiàn)的,現(xiàn)在我將自己的做法記錄一下,以便以后繼續(xù)使用。2010-04-04asp.net 實現(xiàn)動態(tài)顯示當前時間(不用javascript不考慮開銷)
asp.net實現(xiàn)動態(tài)顯示時間,無需用到javascrip,而是用了AJAX。2009-11-11asp.net用Zxing庫實現(xiàn)條形碼輸出的具體實現(xiàn)
這篇文章主要介紹了asp.net用Zxing庫實現(xiàn)條形碼輸出的具體實現(xiàn),有需要的朋友可以參考一下2013-12-12asp.net中利用ajax獲取動態(tài)創(chuàng)建表中文本框的值
通常在做主從表的數(shù)據(jù)錄入中,會碰到在一個頁面上同時錄入主表數(shù)據(jù)和從表數(shù)據(jù),主表的數(shù)據(jù)只有一條,從表的數(shù)據(jù)有一條到多條,這樣就要動態(tài)創(chuàng)建從表數(shù)據(jù)錄入入口。2010-03-03