我做了站点需要 生成静态页面。命名是产品名字来的:
产品型号如下:
LGM012-380/BBS-1174825,如果不做任何处理,生成的静态页面的名字是不符合规范的,/product/LGM012-380/BBS-1174825.html,这样肯定找不到页面
由于静态生成代码 写在单独的类里,无法直接调用 Server.UrlDecode 我用以下方法调用:
System.Web.HttpContext.Current.Server.UrlDecode
发现斜杠“/”没有替换成%2f于是我使用:
System.Web.HttpUtility.UrlEncode
页面的名字改了:
LGM012-380%2fBBS-1174825.html
但是我用http://sitename/product/LGM012-380%2fBBS-1174825.html,这个页面存在却无法访问,
请问大家 这个怎么处理,在不改产品名字的情况下
另外 
System.Web.HttpContext.Current.Server.UrlDecode
System.Web.HttpUtility.UrlEncode
Server.UrlDecode 这三种方法结果是不是相同,推荐用哪一种 

解决方案 »

  1.   

    在自定义404错误得到的内容 是这样的
    [System.Web.HttpValueCollection] = {aspxerrorpath=%2fwebui%2fproduct%2fLGM012-380%2fBBS-1174825.html}
      

  2.   

    区别在于:HttpUtility.UrlEncode()默认是以UTF8对URL进行编码,而Server.UrlEncode()则以默认的编码对URL进行编码。在用 ASP.Net 开发页面的时候, 我们常常通过 System.Web.HttpUtility.UrlEncode 和 UrlDecode 在页面间通过 URL 传递参数. 成对的使用 Encode 和 Decode 是没有问题的.但是, 我们在编写文件下载的页面的时候, 常常用如下方法来指定下载的文件的名称:
    Response.AddHeader("Content-Disposition","attachment; filename="
    + HttpUtility.UrlEncode(fileName, Encoding.UTF8));
    之所以转换成 UTF8 是为了支持中文文件名.这 时候问题就来了, 因为 HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件, 空格就变成了加号.一个解决办法是, 在 HttpUtility 的 UrlEncode 之后, 将 "+" 替换成 "%20"( 如果原来是 "+" 则被转换成 "%2b" ) , 如: 
    fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8); 
    fileName = fileName.Replace("+", "%20"); 
    不明白微软为什么要把空格转换成加号而不是"%20". 记得 JDK 的 UrlEncoder 是将空格转换成 "%20"的.
    经检查, 在 .Net 2.0 也是这样.
    参考:http://www.cnblogs.com/zwl12549/archive/2009/04/06/1430287.html
      

  3.   

    感谢楼上 ,感觉 问题关键不是你那里。好久没来csdn.和传说 中的一样,人都 走了
      

  4.   

    Server.UrlDecode 用这个解码 你用的不对 用另外一个
      

  5.   

    System.Web.HttpContext.Current.Server.UrlDecode  ---Decode解码
    System.Web.HttpUtility.UrlEncode  ---Encode编码
    Server.UrlDecode 这三种方法结果是不是相同,推荐用哪一种?
    ------------------
    上面三种本质应该是一样的,门面模式而已,只是各自适用于不同的场合
    System.Web.HttpContext.Current是指当前请求的上下方环境
    前者适用于所有HttpContext对象生命期(具体你可以去查下HttpModule中的处理顺序)
    而在Page这个特殊的对象里,则可以直接使用后者第三种
    而第二种则是将Http当中特有的功能函数提出来,作为一个工具类,所以在非Http请求环境中(比如WinForm项目),你应该使用他
      

  6.   

    System.Web.HttpUtility.UrlEncode
    页面的名字改了:
    LGM012-380%2fBBS-1174825.html
    但是我用http://sitename/product/LGM012-380%2fBBS-1174825.html,这个页面存在却无法访问,
    我主要 是解决这个问题。
    问题写的有点错误 。都 是encode.不是decode
      

  7.   

    我想了一个办法,带斜杠的型号就跳转到伪静态的页面。这个正则怎么写,这是我原rule 
    <RewriterRule>
            <LookFor>/product/(\S+)-(\d+).html</LookFor>
            <SendTo>/product/$1-$2.html</SendTo>
          </RewriterRule>