时间:2021-07-01 10:21:17 帮助过:14人阅读
- <br><httpModules> <br><add name="HttpModule" type="ThreeHegemony.Utility.AutoAddCid"/> <br></httpModules> <br> <br><br>2)通过继承IHttpModule来实现url传值。 <br><br>代码 <br><span><u></u></span> 代码如下:<pre class="brush:php;toolbar:false layui-box layui-code-view layui-code-notepad"><ol class="layui-code-ol"><li><br>using System; <br>using System.Text; <br>using System.Web; <br>using System.IO; <br>using System.Text.RegularExpressions; <br>namespace ThreeHegemony.Utility <br>{ <br>/// <summary> <br>/// Auther: Jess.zou <br>/// Create data: 2009-08-06 <br>/// Description: 该类作用在Url地址后自动添加(cid) <br>/// </summary> <br>public class AutoAddCid : System.Web.IHttpModule <br>{ <br>public void Init(HttpApplication context) <br>{ <br>context.PostRequestHandlerExecute += new EventHandler(this.OnPreSendRequestContent); <br>} <br>protected void OnPreSendRequestContent(Object sender, EventArgs e) <br>{ <br>System.Web.HttpApplication myContext = (System.Web.HttpApplication)sender; <br>myContext.Response.Filter = new AppendSIDFilter(myContext.Response.Filter); <br>} <br>private void ReUrl_BeginRequest(object sender, EventArgs e) <br>{ <br>string cid = ""; <br>string url = ""; <br>HttpContext context = ((HttpApplication)sender).Context; <br>if (string.IsNullOrEmpty(context.Request.QueryString["cid"])) <br>{ <br>if (context.Request.QueryString.Count == 0) <br>{ <br>url = string.Format("{0}?cid={1}", context.Request.RawUrl, cid); <br>} <br>else <br>{ <br>url = string.Format("{0}&cid={1}", context.Request.RawUrl, cid); <br>} <br>} <br>context.RewritePath(url); <br>} <br>public void Dispose() { } <br>public class AppendSIDFilter : Stream <br>{ <br>private Stream Sink { get; set; } <br>private long _position; <br>private System.Text.StringBuilder oOutput = new StringBuilder(); <br>public AppendSIDFilter(Stream sink) <br>{ <br>Sink = sink; <br>} <br>public override bool CanRead <br>{ <br>get { return true; } <br>} <br>public override bool CanSeek <br>{ <br>get { return true; } <br>} <br>public override bool CanWrite <br>{ <br>get { return true; } <br>} <br>public override long Length <br>{ <br>get { return 0; } <br>} <br>public override long Position <br>{ <br>get { return _position; } <br>set { _position = value; } <br>} <br>public override long Seek(long offset, System.IO.SeekOrigin direction) <br>{ <br>return Sink.Seek(offset, direction); <br>} <br>public override void SetLength(long length) <br>{ <br>Sink.SetLength(length); <br>} <br>public override void Close() <br>{ <br>Sink.Close(); <br>} <br>public override void Flush() <br>{ <br>Sink.Flush(); <br>} <br>public override int Read(byte[] buffer, int offset, int count) <br>{ <br>return Sink.Read(buffer, offset, count); <br>} <br>public override void Write(byte[] buffer, int offset, int count) <br>{ <br>if (string.IsNullOrEmpty(HttpContext.Current.Request["cid"])) <br>{ <br>Sink.Write(buffer, 0, buffer.Length); <br>return; <br>} <br>string content = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count); <br>Regex regex = new Regex(RegexResource.HREF, RegexOptions.IgnoreCase); <br>Regex action_regex = new Regex(RegexResource.ACTION, RegexOptions.IgnoreCase); <br>if (regex.IsMatch(content)) <br>{ <br>content = Regex.Replace(content, RegexResource.HREF, new MatchEvaluator(ReplaceSID), RegexOptions.Compiled | RegexOptions.IgnoreCase); <br>} <br>if (action_regex.IsMatch(content)) <br>{ <br>content = Regex.Replace(content, RegexResource.ACTION, new MatchEvaluator(ReplaceSID), RegexOptions.Compiled | RegexOptions.IgnoreCase); <br>} <br>byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(content); <br>Sink.Write(data, 0, data.Length); <br>} <br>public static string ReplaceSID(Match match) <br>{ <br>if (match.Value.IndexOf("cid=") != -1) <br>{ <br>return match.Value; <br>} <br>string result; <br>if (match.Value.IndexOf('?') == -1) <br>{ <br>result = match.Value.Insert(match.Value.Length - 1, "?cid=" + HttpContext.Current.Request["cid"]); <br>} <br>else <br>{ <br>result = match.Value.Insert(match.Value.Length - 1, "&cid=" + HttpContext.Current.Request["cid"]); <br>} <br>return result; <br>} <br>} <br>} <br>} <br></li><li> </li><li> </li></ol></pre>