在我的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" />
但它仍然无效。
感谢任何帮助,
非常感谢!
答案 0 :(得分:1)
问题实际上是我在网络应用程序中使用的UrlRewriting.net。
答案 1 :(得分:1)
我通过将值转换为ToBase64String解决了同样的问题:
在重定向到目标页面之前,我编码了值:
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)
在目标网页上:
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)
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();
}
}
你可以使它成为一个功能,并尝试它是否正常工作。