using
System;
using
System.Collections.Generic;
using
System.IO;
using
System.Linq;
using
System.Net;
using
System.Text;
using
System.Web;
using
System.Web.SessionState;
namespace
GL
{
public
class
CrossDomainHandler:IHttpModule, IRequiresSessionState
{
/// <summary>
/// 释放内存
/// </summary>
public
void
Dispose()
{
}
/// <summary>
/// 开始请求
/// </summary>
/// <param name="context"></param>
public
void
Init(HttpApplication context)
{
context.BeginRequest +=
new
EventHandler(context_PreRequestHandlerExecute);
}
/// <summary>
/// 请求处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void
context_PreRequestHandlerExecute(
object
sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
HttpContext context = app.Context;
context.Response.AppendHeader(
"charset"
,
"utf-8"
);
context.Response.AppendHeader(
"defaultCharset"
,
"utf-8"
);
context.Response.AppendHeader(
"Content-Type"
,
"text/html; charset=utf-8"
);
var
relativeAddr = context.Request.AppRelativeCurrentExecutionFilePath.Remove(0, 2);
if
(relativeAddr.StartsWith(
"Server"
))
{
var
url =
string
.Concat(
"http://localhost:89"
, relativeAddr.Substring(relativeAddr.IndexOf(
'/'
)));
HttpWebRequest request = WebRequest.Create(url)
as
HttpWebRequest;
request.Method =
"POST"
;
request.ContentType =
"application/x-www-form-urlencoded"
;
var
rs = request.GetRequestStream();
var
sb =
new
StringBuilder(
"a=a&"
);
context.Request.Form.AllKeys.ToList().ForEach(name =>
{
sb.AppendFormat(
"{0}={1}&"
, name, context.Request.Form[name]);
});
var
str = sb.ToString();
if
(str.Contains(
'&'
))
{
str = str.Substring(0, str.Length - 1);
}
var
sw =
new
StreamWriter(rs, Encoding.UTF8);
sw.Write(sb.ToString());
sw.Close();
request.Timeout = 60 * 1000;
var
response = request.GetResponse()
as
HttpWebResponse;
var
ps = response.GetResponseStream();
var
reader =
new
StreamReader(ps, Encoding.UTF8);
string
html = reader.ReadToEnd();
ps.Close();
context.Response.Write(html);
context.Response.End();
}
}
}
}