gpt4 book ai didi

asp.net通过HttpModule自动在Url地址上添加参数

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章asp.net通过HttpModule自动在Url地址上添加参数由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

然而手机客户端又不支持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通过HttpModule自动在Url地址上添加参数的文章就讲到这里了,如果你想了解更多关于asp.net通过HttpModule自动在Url地址上添加参数的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com