asp.net通过HttpModule自动在Url地址上添加参数_asp.net教程-查字典教程网
asp.net通过HttpModule自动在Url地址上添加参数
asp.net通过HttpModule自动在Url地址上添加参数
发布时间:2016-12-29 来源:查字典编辑
摘要:然而手机客户端又不支持Session和Cookie传值,其他方法给页面赋值再传值显得太麻烦了,而且还不易维护,容易弄丢出错,于是想到了用Ht...

然而手机客户端又不支持Session和Cookie传值,其他方法给页面赋值再传值显得太麻烦了,而且还不易维护,容易弄丢出错,于是想到了用HttpModule来把cid参数赋在Url地址上,让url把cid参数每页自动传递下去,需要用cid时只要通过Requet["cid"]获取,这样就不用为传值而烦恼了。

以下是配置方法和源码。

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教程学习
    热门asp.net教程学习
    编程开发子分类