在我的网络应用程序中,我的参数可以包含各种疯狂的字符(俄语字符、斜杠、空格等),因此不能总是按原样在 URL 中表示。
在大约 50% 的情况下,让他们快乐地工作会奏效。像空格这样的东西已经在某处编码了(我猜在 Html.BuildUrlFromExpression 中确实如此)。但其他东西(如“/”和“*”)则不是。
现在我不知道该怎么办了,因为如果我自己对它们进行编码,我的编码将再次部分编码并最终出错。如果我不对它们进行编码,某些字符将无法通过。
我所做的是手动 .replace() 我遇到问题的字符。
这当然不是一个好主意。
想法?
--编辑--
我知道有大量的编码/解码库可供我使用。
看起来 mvc 框架已经在尝试为我做这件事,但还不完全。
<a href="<%=Html.BuildUrlFromExpression<SearchController>(c=>c.Search("", 1, "a \v/&irdStr*ng"))%>" title="my hat's awesome!">
会渲染我
<a href="/Search.mvc/en/Search/1/a%20%5Cv/&irdStr*ng" title="my hat's awesome!">
注意正斜杠、星号和符号是如何不转义的。 为什么有的能逃脱有的不能?我现在怎样才能正确地逃避这个?
是我做错了什么还是框架问题?
最佳答案
应使用 Uri.EscapeDataString
对参数进行转义:
string url = string.Format("http://www.foo.bar/page?name={0}&address={1}",
Uri.EscapeDataString("adlknad /?? lkm#"),
Uri.EscapeDataString(" qeio103 8182"));
Console.WriteLine(url);
Uri uri = new Uri(url);
string[] options = uri.Query.Split('?','&');
foreach (string option in options)
{
string[] parts = option.Split('=');
if (parts.Length == 2)
{
Console.WriteLine("{0} = {1}",parts[0],
Uri.UnescapeDataString(parts[1]));
}
}
关于c# - 双重/不完整的参数 Url 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/240224/