c# - 我的 url 编码有什么问题?

标签 c# .net asp.net-mvc encoding

在我的 asp.net mvc 应用程序中,我创建了以下链接:

http://localhost:2689/en/Formula.mvc/351702++LYS+GRONN+5G+9%252f2++fds  

我收到错误 400(错误请求)。

我认为它在 %25(正斜杠)处阻塞。
我做错了什么?

--编辑 3--
我尝试不对任何内容进行编码,而是依赖 Url.RouteUrl() 的默认编码。
由于某种原因,这似乎没有对“/”进行编码。
如果我先自己编码,我最终会得到双重编码的 %252f。由于某种原因,这给了我一个不好的请求.. 为什么?!

--编辑 2--
我生成了 URI 的最后一部分,如下所示:

  1. 取id.toString
  2. 获取 HttpUtility.UrlEncode(name)
  3. 获取 HttpUtility.UrlEncode(code)
  4. String.Format("{0}--{1}--{2}") 与前面部分的值
  5. 将其作为参数添加到 Url.RouteUrl()

之后,我的操作再次获取此参数,将其拆分为 -- 并返回 HttpUtility.Decode() 值。

我这样做是因为最后两个参数是可选的,但是功能参数。如果它们是在前面的步骤中定义的,则必须将它们带到其他页面。
不那么抽象:一种颜色可以有多个名称,但如果用户通过特定名称选择它,则它应该在所有其他页面中保留。

--编辑 1--
它看起来也像 HttpUtility.UrlEncode() 和 Url.Encode() 返回不同的结果:S

如果我不对“/”进行编码,它会充当分隔符 => 运气不好。 如果我用 Url.Encode() 编码它,我最终会得到 %2F => Code 400 如果我使用 HttpUtility.UrlEncode() 对其进行编码,我将得到 %25 => code 400

因为 400 甚至没有让它通过 asp.net-mvc,所以路由调试器没有用:(

最佳答案

几天前我去过那里。如果您可以接受 URL 中不可读的路由值,请尝试以下操作: URL-encoded slash in URL

关于c# - 我的 url 编码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/665354/

相关文章:

asp.net-mvc - 在 View 中找不到 webgrid 引用

c# - 数据网格中的主键始终为零

.net - Spark 电子邮件模板和主布局

c# - 使用 lambda 表达式左连接

c# - 如何使用 .NET Framework 获取所有事件的 TCP 连接(无非托管 PE 导入!)?

asp.net-mvc - 将 Index 设置为 Controller 的默认路由

c# - Html.Grid 中的复选框回发

c# - Windows 服务启动 winforms 应用程序

c# - 在托管代码和非托管代码之间传递非托管结构的安全数组

c# - ASP.NET 页面在 Firefox 中工作,但在 IE 中不工作