asp.net通过HttpModule自动在Url地址上添加参数
2010-01-14 00:00
721 查看
然而手机客户端又不支持Session和Cookie传值,其他方法给页面赋值再传值显得太麻烦了,而且还不易维护,容易弄丢出错,于是想到了用HttpModule来把cid参数赋在Url地址上,让url把cid参数每页自动传递下去,需要用cid时只要通过Requet["cid"]获取,这样就不用为传值而烦恼了。
以下是配置方法和源码。
1)在web.config配置文件中添加以下节点
2)通过继承IHttpModule来实现url传值。
代码
以下是配置方法和源码。
1)在web.config配置文件中添加以下节点
<httpModules> <add name="HttpModule" type="ThreeHegemony.Utility.AutoAddCid"/> </httpModules>
2)通过继承IHttpModule来实现url传值。
代码
using System; using System.Text; using System.Web; using System.IO; using System.Text.RegularExpressions; namespace ThreeHegemony.Utility { /// <summary> /// Auther: Jess.zou /// Create data: 2009-08-06 /// Description: 该类作用在Url地址后自动添加(cid) /// </summary> public class AutoAddCid : System.Web.IHttpModule { public void Init(HttpApplication context) { context.PostRequestHandlerExecute += new EventHandler(this.OnPreSendRequestContent); } protected void OnPreSendRequestContent(Object sender, EventArgs e) { System.Web.HttpApplication myContext = (System.Web.HttpApplication)sender; myContext.Response.Filter = new AppendSIDFilter(myContext.Response.Filter); } private void ReUrl_BeginRequest(object sender, EventArgs e) { string cid = ""; string url = ""; HttpContext context = ((HttpApplication)sender).Context; if (string.IsNullOrEmpty(context.Request.QueryString["cid"])) { if (context.Request.QueryString.Count == 0) { url = string.Format("{0}?cid={1}", context.Request.RawUrl, cid); } else { url = string.Format("{0}&cid={1}", context.Request.RawUrl, cid); } } context.RewritePath(url); } public void Dispose() { } public class AppendSIDFilter : Stream { private Stream Sink { get; set; } private long _position; private System.Text.StringBuilder oOutput = new StringBuilder(); public AppendSIDFilter(Stream sink) { Sink = sink; } public override bool CanRead { get { return true; } } public override bool CanSeek { get { return true; } } public override bool CanWrite { get { return true; } } public override long Length { get { return 0; } } public override long Position { get { return _position; } set { _position = value; } } public override long Seek(long offset, System.IO.SeekOrigin direction) { return Sink.Seek(offset, direction); } public override void SetLength(long length) { Sink.SetLength(length); } public override void Close() { Sink.Close(); } public override void Flush() { Sink.Flush(); } public override int Read(byte[] buffer, int offset, int count) { return Sink.Read(buffer, offset, count); } public override void Write(byte[] buffer, int offset, int count) { if (string.IsNullOrEmpty(HttpContext.Current.Request["cid"])) { Sink.Write(buffer, 0, buffer.Length); return; } string content = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count); Regex regex = new Regex(RegexResource.HREF, RegexOptions.IgnoreCase); Regex action_regex = new Regex(RegexResource.ACTION, RegexOptions.IgnoreCase); if (regex.IsMatch(content)) { content = Regex.Replace(content, RegexResource.HREF, new MatchEvaluator(ReplaceSID), RegexOptions.Compiled | RegexOptions.IgnoreCase); } if (action_regex.IsMatch(content)) { content = Regex.Replace(content, RegexResource.ACTION, new MatchEvaluator(ReplaceSID), RegexOptions.Compiled | RegexOptions.IgnoreCase); } byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(content); Sink.Write(data, 0, data.Length); } public static string ReplaceSID(Match match) { if (match.Value.IndexOf("cid=") != -1) { return match.Value; } string result; if (match.Value.IndexOf('?') == -1) { result = match.Value.Insert(match.Value.Length - 1, "?cid=" + HttpContext.Current.Request["cid"]); } else { result = match.Value.Insert(match.Value.Length - 1, "&cid=" + HttpContext.Current.Request["cid"]); } return result; } } } }
相关文章推荐
- [转]asp.net通过HttpModule自动在Url地址上添加参数
- ASP.NET:使用HttpModule(给页面添加页头和页尾,重写URL)
- ASP.NET:使用HttpModule(给页面添加页头和页尾,重写URL)
- 使用rewrite 让php 实现类似asp.net 的IHttpModule 进行带参数js文件的参数获取
- ASP.NET 取得 Request URL 的各个部分和通过ASP.NET获取URL地址的方法
- 在asp.net2中针对不支持cookie的APP自动添加sessionid到URL中
- 在ASP.NET中自动给URL地址加上超链接
- HttpModule 实现 ASP.Net (*.aspx) 中文简繁体的自动转换,不用修改原有的任何代码,直接部署即可!
- 在ASP.NET中自动给URL地址加上超链接在ASP.NET中自动给URL地址加上超链接
- ASP.NET下利用HttpModule实现简体中文向繁体中文的自动转换
- 通过ASP.NET获取URL地址方法
- 在ASP.NET中自动给URL地址加上超链接
- ASP.net中通过HyperLink的NavigateUrl属性传递参数,与新页面的Page_Load()接收参数
- 通过微信分享链接地址会自动添加from参数区分来源
- 在ASP.NET中自动给URL地址加上超链接(好东东)
- URL 的各个部分和通过ASP.NET获取URL地址的方法
- 在ASP.NET中自动给URL地址加上超链接
- 在ASP.NET里通过URL传递参数得到乱码的解决方法