当前位置:编程学习 > C#/ASP.NET >>

url重写问题,超过10个参数表示问题!

RewriteRule /gfxs/([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*)!([0-9]*) /gfxs/Index.aspx?BigCode=$1&&ChildCode=$2&&FormatCode=$3&&SizeCode=$4&&DpiCode=$5&&IndexCode=$6&&ColorCode=$7&&LevelCode=$8&&page=$9&&o=$^\d{10}$&&da=$11 [NC]


这样超过10个参数,$10输出就会是$1+0这样的,而不是第十个参数传的值,请问第十个该怎么表示!! --------------------编程问答-------------------- 10都传出来了  默哀! --------------------编程问答--------------------
引用 1 楼 yankai159357 的回复:
10都传出来了 默哀!


没办法,东西多!! --------------------编程问答-------------------- 没必要这么多吧,最多3~5个就够了! --------------------编程问答-------------------- 需要这么多,拒绝灌水! --------------------编程问答-------------------- 把这个类建立起来
 public class ToHexS
    {
        public static string ToHexString(string s)
        {
            char[] chars = s.ToCharArray();
            StringBuilder builder = new StringBuilder();
            for (int index = 0; index < chars.Length; index++)
            {
                bool needToEncode = NeedToEncode(chars[index]);
                if (needToEncode)
                {
                    string encodedString = ToHexString(chars[index]);
                    builder.Append(encodedString);
                }
                else
                {
                    builder.Append(chars[index]);
                }
            }
            return builder.ToString();
        }
        /// <summary>   
        /// 判断字符是否需要使用特殊的 ToHexString 的编码方式   
        /// </summary>   
        /// <param name="chr"></param>   
        /// <returns></returns>   
        private static bool NeedToEncode(char chr)
        {
            string reservedChars = "$-_.+!*'(),@=&";
            if (chr > 127)
                return true;
            if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
                return false;
            return true;
        }
        /// <summary>   
        /// 为非 ASCII 字符编码   
        /// </summary>   
        /// <param name="chr"></param>   
        /// <returns></returns>   
        private static string ToHexString(char chr)
        {
            UTF8Encoding utf8 = new UTF8Encoding();
            byte[] encodedBytes = utf8.GetBytes(chr.ToString());
            StringBuilder builder = new StringBuilder();
            for (int index = 0; index < encodedBytes.Length; index++)
            {
                builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
            }
            return builder.ToString();
        }

        /// <summary>   
        /// 根据文件后缀来获取MIME类型字符串   
        /// </summary>   
        /// <param name="extension">文件后缀</param>   
        /// <returns></returns>   
        static string GetMimeType(string extension)
        {
            string mime = string.Empty;
            extension = extension.ToLower();
            switch (extension)
            {
                case ".avi": mime = "video/x-msvideo"; break;
                case ".bin":
                case ".exe":
                case ".msi":
                case ".dll":
                case ".class": mime = "application/octet-stream"; break;
                case ".csv": mime = "text/comma-separated-values"; break;
                case ".html":
                case ".htm":
                case ".shtml": mime = "text/html"; break;
                case ".css": mime = "text/css"; break;
                case ".js": mime = "text/javascript"; break;
                case ".doc":
                case ".dot":
                case ".docx": mime = "application/msword"; break;
                case ".xla":
                case ".xls":
                case ".xlsx": mime = "application/msexcel"; break;
                case ".ppt":
                case ".pptx": mime = "application/mspowerpoint"; break;
                case ".gz": mime = "application/gzip"; break;
                case ".gif": mime = "image/gif"; break;
                case ".bmp": mime = "image/bmp"; break;
                case ".jpeg":
                case ".jpg":
                case ".jpe":
                case ".png": mime = "image/jpeg"; break;
                case ".mpeg":
                case ".mpg":
                case ".mpe":
                case ".wmv": mime = "video/mpeg"; break;
                case ".mp3":
                case ".wma": mime = "audio/mpeg"; break;
                case ".pdf": mime = "application/pdf"; break;
                case ".rar": mime = "application/octet-stream"; break;
                case ".txt": mime = "text/plain"; break;
                case ".7z":
                case ".z": mime = "application/x-compress"; break;
                case ".zip": mime = "application/x-zip-compressed"; break;
                default:
                    mime = "application/octet-stream";
                    break;
            }
            return mime;
        }


    }

你获取值得时候 调用这个方法
DAL.ToHexS.ToHexString(Name); 把你的那个Name值传进去  再获取 --------------------编程问答-------------------- 确定需要这么多? --------------------编程问答-------------------- --------------------编程问答--------------------
引用 5 楼 yankai159357 的回复:
把这个类建立起来
 public class ToHexS
  {
  public static string ToHexString(string s)
  {
  char[] chars = s.ToCharArray();
  StringBuilder builder = new StringBuilder();
  for (int index = 0; index <……


能行吗? --------------------编程问答-------------------- 学习下... --------------------编程问答--------------------
引用 8 楼 aysunzheng 的回复:
引用 5 楼 yankai159357 的回复:
把这个类建立起来
public class ToHexS
{
public static string ToHexString(string s)
{
char[] chars = s.ToCharArray();
StringBuilder builder = new StringBuilder();
for (int index……


不是这样的,我用的是ISAPI_Rewrite3组件,比方说我前面是0!0!0!0!0!0!0!0!0!1!0! 我输出第十个得到的结果是01,1!0!0!0!0!0!0!0!0!1!0!这样,结果是10,总之是$1+0,而不是第10个0,前九个都可以!!
求解! --------------------编程问答-------------------- http://www.caopeng.org/bbs/thread-58068-1-1.html --------------------编程问答-------------------- 没试过这么长地 --------------------编程问答-------------------- 这么长,厉害 --------------------编程问答-------------------- 这么多个参数???

能不能将参数先合并,然后获取到以后再拆分呢? --------------------编程问答-------------------- 把参数 按照规格合并  然后加密  一次传递
接收在解析 --------------------编程问答--------------------
引用 11 楼 wxr0323 的回复:
http://www.caopeng.org/bbs/thread-58068-1-1.html


子夜大神,我是用的ISAPI_Rewrite3,跟你那帖子一样的规则,超过9个了,也会出错的,ISAPI_Rewrite3里面测试正常,放到项目里就出错了,愁!! --------------------编程问答--------------------
引用 15 楼 jin225 的回复:
把参数 按照规格合并 然后加密 一次传递
接收在解析


看来可行,我试试!
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,