2010-08-15 65 views
2

您好!ASP.NET MVC 2 - 请求编码问题

有一个控制器和接收打通一个PARAM的动作,约在这里这样:

www.site.com/controller/action/?query=параметр< - 俄语单词

问题:

例1:www.site.com/controller/action/?query=Пример< - 俄语单词

实施例2:www.site.com/controller/action/?query=Example

读PARAM:

var param = Request.QueryString["query"]; 

结果1:

param = "������" 

从调试器的数据:

Request.RawUrl = "/controller/action/?q=%CF%F0%E8%EC%E5%F0" 
QueryString = {q=%ufffd%ufffd%ufffd%ufffd%ufffd%ufffd} 

结果2:

param = "Example" 

从调试器的数据:

Request. RawUrl = "/controller/action/?q=Example" 
QueryString = {q=Example} 

ContentEncoding内置于UTF-8。

Web.config: 
<globalization requestEncoding="utf-8" responseEncoding="utf-8" 
      fileEncoding="utf-8" /> 

问: 我怎么能得到正确使用俄语单词PARAM?

回答

0
HttpUtility.UrlDecode(Request.QueryString["q"], Encoding.Default) 

解决了这个问题。

+0

您应该将问题标记为已回答 – 2010-09-08 18:10:59

2

你不应该在URI中使用俄语单词(идаженестоитпробовать)。你应该编码它们。

RFC 1738:统一资源定位器(URL)规范

..Only字母数字[0-9A-ZA-Z],特殊字符 “$ -_ + *'()!”[不包括[引用]以及用于其保留目的的保留字符可以在URL内未经编码使用。

如果用户打算用俄语输入网址自己 - (搜索),您可以尝试UrlDecode Request.Url

+0

非常感谢! UrlDecode的作品。 HttpUtility.UrlDecode(Request.QueryString [“q”],Encoding.Default); 但很奇怪的是,Encoding.Default是win-1251。我出于某种原因认为Win7完全使用Unicode :( – meridian 2010-08-16 08:50:36