使用ASP.Net创建代理实现Javascript跨域访问
2011-06-21 16:46
507 查看
这段时间在做一个带电子地图的系统,调用的第三方的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;
}
}
}
2. 更改JS访问的URL
把JS访问的URL,比如这里是"http://www.jxmap.gov.cn/emap"
改成代理的URL,比如"http://www.somewhere.com/WebProxy.ashx?"
最后的问号是为了便于分割查询字符串
3. 测试下,终于可以在不弹警告的状态下,调出嘉兴地图网的数据了
无奈这个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;
}
}
}
2. 更改JS访问的URL
把JS访问的URL,比如这里是"http://www.jxmap.gov.cn/emap"
改成代理的URL,比如"http://www.somewhere.com/WebProxy.ashx?"
最后的问号是为了便于分割查询字符串
3. 测试下,终于可以在不弹警告的状态下,调出嘉兴地图网的数据了
相关文章推荐
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
- [原创]asp.net结合html,javascript实现无刷新跨域数据提交
- asp.net中倒计时自动跳转页面的实现方法(使用javascript)
- 使用Javascript,CSS和Ajax创建ASP.NET自定义控件
- [原创]asp.net结合html,javascript实现无刷新跨域数据提交
- ASP.NET XmlHttp跨域访问实现代码
- 在ASP.NET使用JavaScript显示信息提示窗口实现原理及代码
- Asp.Net SignalR 集线器不使用代理的实现
- [原创]asp.net结合html,javascript实现无刷新跨域数据提交
- ASP.NET MVC & WebApi 中实现Cors来让Ajax可以跨域访问 (转载)
- Asp.net中使用javaScript实现前后台方法的相互调用
- 使用Javascript,CSS和Ajax创建ASP.NET自定义控件
- Asp.net中的JavaScript使用之三javaScript访问服务器控件
- ASP.NET C# 用后台代码实现 跨域名访问 返回HTML代码
- asp.net使用javascript实现不刷新页面获取当前时间
- asp.net结合html,javascript实现无刷新跨域数据提交
- ASP.NET中使用JavaScript实现图片自动水平滚动效果
- 让ASP.NET MVC不使用jsonp也可以跨域访问
- JavaScript提高:002:ASP.NET使用easy UI实现tab效果
- 使用Javascript,CSS和Ajax创建ASP.NET自定义控件