无法解码Request.QueryString中的西里尔文值

时间:2013-06-04 15:50:52

标签: c# asp.net iis-7 webforms

在我的IIS7上,我有ASP.NET WebForms站点,我在查询字符串中使用了西里尔语值。我在重定向时使用HttpUtility.UrlEncode作为参数,最后我有网址:

http://mysite.com/Search.aspx?SearchText=текст

当我尝试读取参数SearchText值(包括HttpUtility.Decode()函数)时,它返回错误的ÑекÑÑ值,但应返回текст

它适用于ASP.NET开发人员服务器上的localhost,但不适用于IIS7(包括本地IIS7) 在我的web.config中我设置了行

<globalization requestEncoding="utf-8" responseEncoding="utf-8" />

但它仍然无效。

感谢任何帮助,

非常感谢!

3 个答案:

答案 0 :(得分:1)

问题实际上是我在网络应用程序中使用的UrlRewriting.net。

答案 1 :(得分:1)

我通过将值转换为ToBase64String解决了同样的问题:

  1. 在重定向到目标页面之前,我编码了值:

        Dim Data() As Byte  'For the data to  be encoded
    
        'Convert the string into a byte array
        Dim encoding As New System.Text.UTF8Encoding
        Data = encoding.GetBytes(ParamToPass)
    
        'Converting to ToBase64String
        Dim EncodedStringToPass as string = Convert.ToBase64String(Data)
    
        Page.Response.Redirect("TargetPage.aspx?Param=" & EncodedStringToPass, False)
    
  2. 在目标网页上:

        Dim Data() As Byte  'For the data to  be decoded
        Data = Convert.FromBase64String(Page.Request.Params("Param"))
    
        Dim encoding As New System.Text.UTF8Encoding
        Dim ParamToPass As String = encoding.GetString(Data)
    
  3. P.S。该方法的唯一缺点是无法在浏览器的url字符串中看到参数的实际值。但在我的情况下,这没有问题

答案 2 :(得分:0)

如果您使用redirect功能,其中有“是”此呼叫

url = UrlEncodeRedirect(url);

那打破了Cyrilic,希腊人物和其他人。如果我记得很清楚,(我说记得因为这个问题来自我几个月前的经历),对于角色的突破是在?符号之后。在任何情况下,我都有同样的问题。

可能的解决方案:

  • 制作您的自定义重定向,可能不如原版重做,但您可以通过此问题。
  • 找到一种替代方法来重定向逻辑。
  • 使您的自定义文本编码仅使用未通过重定向更改的有效网址字符,然后再将其解码。这就是隐藏的文字,而不是可见的可读搜索词。

这是重定向的基础。

public static void RedirectSimple(string url, bool endResponse)
{
    HttpResponse MyResponse = HttpContext.Current.Response;

    MyResponse.Clear();
    MyResponse.TrySkipIisCustomErrors = true;
    MyResponse.StatusCode = 302;
    MyResponse.Status = "302 Temporarily Moved";
    MyResponse.RedirectLocation = url;

    MyResponse.Write("<html><head><title>Object moved</title></head><body>\r\n");
    MyResponse.Write("<h2>Object moved to <a href=\"" + url + "\">here</a>.</h2>\r\n");
    MyResponse.Write("</body></html>\r\n");

    if (endResponse){
        MyResponse.End();
    }
}

你可以使它成为一个功能,并尝试它是否正常工作。