在我的 asp.net mvc 应用程序中,我创建了以下链接:
http://localhost:2689/en/Formula.mvc/351702++LYS+GRONN+5G+9%252f2++fds
我收到错误 400(错误请求)。
我认为它在 %25(正斜杠)处阻塞。
我做错了什么?
--编辑 3--
我尝试不对任何内容进行编码,而是依赖 Url.RouteUrl() 的默认编码。
由于某种原因,这似乎没有对“/”进行编码。
如果我先自己编码,我最终会得到双重编码的 %252f。由于某种原因,这给了我一个不好的请求..
为什么?!
--编辑 2--
我生成了 URI 的最后一部分,如下所示:
- 取id.toString
- 获取 HttpUtility.UrlEncode(name)
- 获取 HttpUtility.UrlEncode(code)
- String.Format("{0}--{1}--{2}") 与前面部分的值
- 将其作为参数添加到 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/