我做了站点需要 生成静态页面。命名是产品名字来的:
产品型号如下:
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 这三种方法结果是不是相同,推荐用哪一种
产品型号如下:
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 这三种方法结果是不是相同,推荐用哪一种
解决方案 »
- (100分)获取html中数据的正则
- 设置LazyLoadingEnabled EF 4.X POCO Entity Generator for C#
- 大家帮忙看看这个错误怎么解决?
- menu控件如何在点击后变换背景图`(不是背景色)`谢谢
- .net里引用对象的问题
- 大家帮帮看看我这个问题,谢谢了
- 菜鸟求助!点击服务器按钮自动后却自动在文本框里添加一些','为什么呢?
- 请教,有谁知道http://www.huashanskin.com/中的在线咨询如何做的吗?有例子更好,这里先谢过了;
- 合并数组输出
- 控件问题如何解决?
- n条属性未能找到,如"key"的架构信息
- CKEditor、CKFinder整合后报错 未能加载类型“CKFinder.Connector.Connector”
[System.Web.HttpValueCollection] = {aspxerrorpath=%2fwebui%2fproduct%2fLGM012-380%2fBBS-1174825.html}
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
System.Web.HttpUtility.UrlEncode ---Encode编码
Server.UrlDecode 这三种方法结果是不是相同,推荐用哪一种?
------------------
上面三种本质应该是一样的,门面模式而已,只是各自适用于不同的场合
System.Web.HttpContext.Current是指当前请求的上下方环境
前者适用于所有HttpContext对象生命期(具体你可以去查下HttpModule中的处理顺序)
而在Page这个特殊的对象里,则可以直接使用后者第三种
而第二种则是将Http当中特有的功能函数提出来,作为一个工具类,所以在非Http请求环境中(比如WinForm项目),你应该使用他
页面的名字改了:
LGM012-380%2fBBS-1174825.html
但是我用http://sitename/product/LGM012-380%2fBBS-1174825.html,这个页面存在却无法访问,
我主要 是解决这个问题。
问题写的有点错误 。都 是encode.不是decode
<RewriterRule>
<LookFor>/product/(\S+)-(\d+).html</LookFor>
<SendTo>/product/$1-$2.html</SendTo>
</RewriterRule>