c# - 双重/不完整的参数 Url 编码

标签 c# asp.net-mvc encoding

在我的网络应用程序中,我的参数可以包含各种疯狂的字符(俄语字符、斜杠、空格等),因此不能总是按原样在 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/

相关文章:

c# - 在非开发机器上使用 C# 类库

c# - Thread.VolatileRead 实现

c# - 通过方法设置变量与设置实际变量的区别

c# - 如何执行连接两个实体的 LINQ 查询并在其中一个实体上选择什么位置?

c# - 如何检查 Request.QueryString 是否不为空

c# - 使用自动迁移 Entity Framework mvc c# 在新表中添加外键

jquery - 使用 Url.Action 时如何将参数传递给 URL?

.net - 将字符串编码为 ISO8859-1 时出现问题

c# - 这是 base40 吗?如果是,我如何在 C# 中对其进行解码?

animation - GIFEncoder.Class.php 和一个无循环 GIF 动画