有一条这样的规则:
<Rule key="^/topic-(\d+)-(\d+).html" value="/Detail.aspx?bid=$1%26sid=$2" />
在Detail.aspx调试的时候,我用Request.Querstring无法取到sid的值。整个串格式如:bid=100%26sid=155这样子。
请问如何解决?

解决方案 »

  1.   

    bid=100%26&sid=155
    中间加个&试下
      

  2.   

    这个规则是写在web.config里面的,&必需写成URLENCODE的形式。%26就是&
      

  3.   

    正则没问题吧。
    用topic-100-155.html这样的形式访问可以重写到Detail.aspx这个页面上来,并且用Request.QueryString取到
    的值是bid=100%26sid=155。。取不到sid的值。
      

  4.   

    哦这样呀
    呵呵
    %26用 &表示呢
      

  5.   

    @zyug:这个规则是写在web.config里面的,&必需写成URLENCODE的形式。%26就是&
      

  6.   

    我知道你的意思了
    我没有测试过 bid=100%26sid=155
    是否能被Request.QuerString 解析到,你应该可以在Rewrite里面做二次运行的
    string url = 刚才匹配到的url
    HttpContext.Current.RewritePath(url.Replace("%26","&"));
      

  7.   

    重写组件自己写就好了,其实很简单的,给你一个我写的
    public class Rewrite : System.Web.IHttpModule
        {
            public void Init(HttpApplication application)
            {
                application.AuthorizeRequest += new EventHandler(application_AuthorizeRequest);
            }
                          void application_AuthorizeRequest(object sender, EventArgs e)
            {
                HttpApplication application = (HttpApplication)sender;
                HttpContext context = application.Context;
                string oriurl = context.Request.Url.ToString();
                string url = context.Request.Path;
                if (url == "/Tradeshow")
                {
                    context.RewritePath("~/TradeShows/TradeShowList.aspx");
                }
                if( url.ToLower().EndsWith(".js")||
                    url.ToLower().EndsWith(".css") ||
                    url.ToLower().EndsWith(".gif") || 
                    url.ToLower().EndsWith(".jpg") ||
                    url.ToLower().EndsWith(".doc") ||
                    url.ToLower().EndsWith("asmx") ||
                    url.ToLower().EndsWith("axd")  ||
                    url.ToLower().EndsWith("aspx") ||
                    url.ToLower().EndsWith("asp")
                    )return;
                string match = Rules.Match(url);
                if (match == string.Empty) return;
                context.RewritePath(match);
            }
          
            public void Dispose()
            {        }    }    public class Rules : System.Collections.CollectionBase
        {
           static System.Collections.Hashtable rules = new System.Collections.Hashtable();        static Rules()
            {
                rules.Clear();
                //用户网站
                rules.Add("^/([a-zA-Z0-9]+)\\.co/home/?$", "~/EnterpriseWeb/Home.aspx?member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/AboutUs/?$", "/EnterpriseWeb/AboutUs.aspx?member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/ProductList/([0-9]+)/?$", "/EnterpriseWeb/ProductsList.aspx?Categorid=$2&member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/ProductList/?$", "/EnterpriseWeb/ProductsList.aspx?member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/ProductDetail/([0-9]+)/?$", "/EnterpriseWeb/ProductDetail.aspx?productid=$2&member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/ContactInfo/?$", "/EnterpriseWeb/ContactInfo.aspx?member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/Showlist/?$", "/EnterpriseWeb/Showlist.aspx?member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/OfferList/?$", "/EnterpriseWeb/OfferList.aspx?member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/OfferList/([0-9]+)/?$", "/EnterpriseWeb/OfferList.aspx?Categorid=$2&member=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co/Offerdetail/([0-9]+)/?$", "/EnterpriseWeb/Offerdetail.aspx?tradeid=$2&member=$1");            //多重目录
                rules.Add("/Buy/(.+)/category", "~/BuySubCategories.aspx?Categorid=$1");
                rules.Add("/Sell/(.+)/category", "~/SellSubCategories.aspx?Categorid=$1");
                rules.Add("^/([a-zA-Z0-9]+)\\.co$", "~/EnterpriseWeb/AboutUs.aspx?member=$1");
                rules.Add("/BuyList/category", "~/BuyList.aspx");
                rules.Add("/SellList/category", "~/SellList.aspx");
                rules.Add("/SellList/([0-9]+)/category", "~/SellList.aspx?Categorid=$1");
                rules.Add("/BuyList/([0-9]+)/category", "~/BuyList.aspx?Categorid=$1");
                  //单级目录
                rules.Add("^/Buy$", "~/Buy.aspx");
                rules.Add("^/Sell$", "~/Sell.aspx");
                rules.Add("^/Trade[Ss]how/?$", "~/TradeShows/TradeShowList.aspx");
      
                rules.Add("^/Member$", "~/MemberArea/Default.aspx");
                rules.Add("^/Default$", "~/Default.aspx");
                rules.Add("^/Home$", "~/Default.aspx");
       
          
            }        public static string Match(string url)
            {
                foreach (string s in rules.Keys)
                {
                    if (System.Text.RegularExpressions.Regex.IsMatch(url, s))
                    {
                        return Regex.Replace(url, s,rules[s].ToString(), RegexOptions.Compiled | RegexOptions.IgnoreCase);
                        break;
                    }
                }            return string.Empty;
            }
            
        }
      

  8.   

    @zyug:我是用NBear.Web.Modules.UrlRewriteModule这种方式的,这个原本是不是.net框架自带的呀?