在我的asp.net mvc应用程序中,我创建了以下链接:
http://localhost:2689/en/Formula.mvc/351702++LYS+GRONN+5G+9%252f2++fds
我收到错误400(错误请求)。
我认为它会阻止%25(正斜杠) 我做错了什么?
- 编辑3 -
我尝试不编码任何东西,而是依赖于Url.RouteUrl()的默认编码
似乎由于某种原因,这不会编码“/”
如果我自己先编码,我最终得到的是双重编码的%252f。由于某种原因,这给了我一个糟糕的要求..
为什么呢?!
- 编辑2 -
我按如下方式生成了URI的最后一部分:
之后我的动作再次获取此参数,将其拆分为 - 和HttpUtility.Decode()返回值。
我是这样做的,因为最后两个参数是可选的,但功能参数。如果它们是在上一步中定义的,则必须将它们带到其他页面 不太抽象:颜色可以有多个名称,但如果用户通过特定名称选择它,则应该将其保留在所有其他页面中。
- 编辑1 -
它看起来像HttpUtility.UrlEncode()和Url.Encode()返回不同的结果:S
如果我不对“/”进行编码,则它会充当分隔符=>那里没有运气。 如果我用Url.Encode()编码它,我最终得到%2F =>代码400 如果我用HttpUtility.UrlEncode()编码它,我最终得到%25 =>代码400
因为400甚至没有通过asp.net-mvc,路由调试器是没用的:(
答案 0 :(得分:3)
几天前我在那里。如果您可以在URL中接受不可读的路由值,请尝试以下操作: URL-encoded slash in URL
答案 1 :(得分:2)
%25
实际上是编码为“%”,因此%252f
编码为“%2f”。
%2f
(编码为“/”)不允许在URL中使用。
答案 2 :(得分:0)
答案 3 :(得分:0)
我没有太多关注编码 - 但请注意,如果这是存储某处(或以某种方式采取行动),那么POST会更合适。如果右侧的文本实际上代表id为351702的数据(虚荣网址,非常类似于/665354/whats-wrong-with-my-url-encoding
),那么您应该将文本人性化。就像空间已从上面移除一样。将此作为路径中的一个单独的级别,通常被丢弃也是很常见的。
一般来说,MVC网址应该是可理解的。
答案 4 :(得分:0)
您不能在URL中使用正斜杠作为值。这是关于创建浏览器和SEO友好URLS =>的好文章。 http://www.dominicpettifer.co.uk/displayBlog.aspx?id=34
[编辑] 每当您创建路由时,都会将其与URL模式关联(默认模式为{controller} / {action} / {id})。在这个url模式中,你应该使用正斜杠来分隔不同的标记。希望有所帮助
答案 5 :(得分:0)