亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何利用HttpModule給Url追加參數?

如何利用HttpModule給Url追加參數?

素胚勾勒不出你 2018-12-06 14:29:23
現在我們團隊在開發手機站,當中遇到一個問題.就是每張頁面得傳一個參數,而這個參數又不是從固定的頁面進來的,也就是說無論從哪張頁面進來,參數都要全站點的頁面傳下去,目前找不到解決辦法.從網上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, "&amp;cid=" + HttpContext.Current.Request["cid"]);??????????????? } ??????????????? return result;??????????? }??????? }??? }}
查看完整描述

8 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

無論從哪張頁面進來,參數都要全站點的頁面傳下去

?

既然是這樣的話樓主為什么非要使用url傳參來實現呢,定義全局變量,或者使用Session來存儲要傳遞的參數豈不是更好?

查看完整回答
反對 回復 2019-01-21
?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

手機站點對于session來講不適合,因為有時候會沒有信號,這樣session就中斷了.
查看完整回答
反對 回復 2019-01-21
?
MYYA

TA貢獻1868條經驗 獲得超4個贊

由于我們這個項目是用于手機的,如果用session的話是可以保存參數的值,但是用戶保存的頁面的路徑中沒有這個參數的話,他下一次用這個路徑來登的話那我們就永遠取不到值的.
查看完整回答
反對 回復 2019-01-21
?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

不是很懂,cookie可以滿足要求嗎?

查看完整回答
反對 回復 2019-01-21
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

cookie 是不行的
查看完整回答
反對 回復 2019-01-21
?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

根據你的需求

目前用Global.cs處理相對簡單,引入也方便,具體步驟和原理和和httpmodule一致如下:

1:截取輸出前的內容文本

2:正則取出所有href的鏈接

3:循環替換href的鏈接

4:輸出到客戶端

這里有兩篇文章:是處理頁面標題的,不過方式是一致的,只是需要處理的正則需要發現點變化:

1:一個頁面標題和過濾輸出的解決方案(上)

2:一個頁面標題和過濾輸出的解決方案(下)

查看完整回答
反對 回復 2019-01-21
  • 8 回答
  • 0 關注
  • 475 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號