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

时间:2010-08-15 19:55:20

标签: asp.net-mvc-2

您好!

有一个控制器和一个动作通过GET接收一个参数,大约在这里:

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

问题:

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

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

阅读参数:

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" />

问题: 我怎样才能正确地用俄语单词获得参数?

3 个答案:

答案 0 :(得分:2)

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

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

..只有字母数字[0-9a-zA-Z],特殊字符“$ -_。+!*'(),”[不包括引号 - ed]和用于保留目的的保留字符可以在URL中使用未编码的。

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

答案 1 :(得分:1)

您需要UrlEncode查询字符串值。

答案 2 :(得分:0)

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

解决了这个问题。