使用ASP.Net创建代理实现Javascript跨域访问
2011-06-21 16:46 贼寇在何方 阅读(731) 评论(0) 编辑 收藏 举报这段时间在做一个带电子地图的系统,调用的第三方的API
无奈这个API比较老,还没有解决跨域访问的问题
现在只好自己写一个代理实现
1.在网站中添加一个一般处理程序(ashx)
<%@ WebHandler Language="C#" Class="WebProxy"%>
using System;
using System.IO;
using System.Net;
using System.Web;
publicclass WebProxy : IHttpHandler
{
publicvoid ProcessRequest(HttpContext context)
{
// 需要通过代理访问的站点URL
var url ="http://www.jxmap.gov.cn/emap/";
// 原始URL
var curl = context.Request.Url.AbsoluteUri;
// 查询信息放在原始URL的问号后面
var query = curl.Substring(curl.IndexOf("?") +1);
try
{
// 代理访问站点
var request = (HttpWebRequest)WebRequest.Create(url + query);
var response = (HttpWebResponse)request.GetResponse();
// 读入代理访问站点的Stream
var stream = response.GetResponseStream();
using (var ms =new MemoryStream())
{
var buffer =newbyte[1024];
int i = stream.Read(buffer, 0, buffer.Length);
while (i >0)
{
ms.Write(buffer, 0, i);
i = stream.Read(buffer, 0, buffer.Length);
}
// 以二进制方式写入Response
context.Response.BinaryWrite(ms.ToArray());
}
response.Close();
}
catch
{
// 拦截404等偶发性异常
}
}
publicbool IsReusable
{
get
{
returnfalse;
}
}
}
using System;
using System.IO;
using System.Net;
using System.Web;
publicclass WebProxy : IHttpHandler
{
publicvoid ProcessRequest(HttpContext context)
{
// 需要通过代理访问的站点URL
var url ="http://www.jxmap.gov.cn/emap/";
// 原始URL
var curl = context.Request.Url.AbsoluteUri;
// 查询信息放在原始URL的问号后面
var query = curl.Substring(curl.IndexOf("?") +1);
try
{
// 代理访问站点
var request = (HttpWebRequest)WebRequest.Create(url + query);
var response = (HttpWebResponse)request.GetResponse();
// 读入代理访问站点的Stream
var stream = response.GetResponseStream();
using (var ms =new MemoryStream())
{
var buffer =newbyte[1024];
int i = stream.Read(buffer, 0, buffer.Length);
while (i >0)
{
ms.Write(buffer, 0, i);
i = stream.Read(buffer, 0, buffer.Length);
}
// 以二进制方式写入Response
context.Response.BinaryWrite(ms.ToArray());
}
response.Close();
}
catch
{
// 拦截404等偶发性异常
}
}
publicbool IsReusable
{
get
{
returnfalse;
}
}
}
2. 更改JS访问的URL
把JS访问的URL,比如这里是"http://www.jxmap.gov.cn/emap"
改成代理的URL,比如"http://www.somewhere.com/WebProxy.ashx?"
最后的问号是为了便于分割查询字符串
3. 测试下,终于可以在不弹警告的状态下,调出嘉兴地图网的数据了