最近做东西遇到了ajax跨域(cross domain)访问的问题,最后采用了application proxies 方式解决,即在本域内放置一个代理文件(视本域支持的开发语言选定asp、asp.net或是其他),此代理文件将url参数(querystring)发送到目标域对应页面获取html代码,然后输出。ajax直接访问这个代理文件以达到跨域的目的。
基于asp.net的跨域访问代理文件c#代码如下:
@ page language=c# autoeventwireup=true responseencoding=utf-8 %>
@ import namespace=system.net %>
@ import namespace=system.io %>
script runat=server>
protected override void onload(eventargs e)
{
base.onload(e);
string sourceurl = http://devspy.net;
this.page.response.write(transferhtmlpage(string.concat(sourceurl, ?, this.page.request.querystring)));
}
public string transferhtmlpage(string url)
{
string result = string.empty;
try
{
httpwebrequest request = (httpwebrequest)webrequest.create(url);
httpwebresponse response = (httpwebresponse)request.getresponse();
streamreader reader = new streamreader(response.getresponsestream(), encoding.utf8);
result = reader.readtoend();
}
catch(exception ex)
{
return string.format(@服务器获取文件内容出错:{0}
, ex.message);
}
if (!checkversionwatermark(result))
return @版本水印失效,请联系相关技术人员。
;
return result;
}
public bool checkversionwatermark(string inputstring)
{
return true;//不验证水印了
//string pattern = watermark;
//return regex.ismatch(inputstring, pattern, regexoptions.ignorecase);
}
script>
另外还有基于asp和php的实现,不再列出,感兴趣的可以下载包含这三个文件的压缩包:
http://files.cnblogs.com/cncxz/ajaxproxy.rar
