現在我們團隊在開發手機站,當中遇到一個問題.就是每張頁面得傳一個參數,而這個參數又不是從固定的頁面進來的,也就是說無論從哪張頁面進來,參數都要全站點的頁面傳下去,目前找不到解決辦法.從網上down了一篇代碼,可是RegexResource.ACTION,RegexResource.HREF報錯,麻煩高手幫忙解決一下.下面我把代碼貼上,小弟跪謝...
?
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;??????????? }??????? }??? }}
8 回答
千巷貓影
TA貢獻1829條經驗 獲得超7個贊
無論從哪張頁面進來,參數都要全站點的頁面傳下去
?
既然是這樣的話樓主為什么非要使用url傳參來實現呢,定義全局變量,或者使用Session來存儲要傳遞的參數豈不是更好?
MYYA
TA貢獻1868條經驗 獲得超4個贊
由于我們這個項目是用于手機的,如果用session的話是可以保存參數的值,但是用戶保存的頁面的路徑中沒有這個參數的話,他下一次用這個路徑來登的話那我們就永遠取不到值的.
楊魅力
TA貢獻1811條經驗 獲得超6個贊
根據你的需求
目前用Global.cs處理相對簡單,引入也方便,具體步驟和原理和和httpmodule一致如下:
1:截取輸出前的內容文本
2:正則取出所有href的鏈接
3:循環替換href的鏈接
4:輸出到客戶端
這里有兩篇文章:是處理頁面標題的,不過方式是一致的,只是需要處理的正則需要發現點變化:
- 8 回答
- 0 關注
- 475 瀏覽
添加回答
舉報
0/150
提交
取消
