我的网址编码有什么问题?

时间:2009-03-20 08:38:16

标签: 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(名称)
  3. 采取HttpUtility.UrlEncode(代码)
  4. String.Format(“{0} - {1} - {2}”)及其前几部分的值
  5. 将其作为参数添加到Url.RouteUrl()
  6. 之后我的动作再次获取此参数,将其拆分为 - 和HttpUtility.Decode()返回值。

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

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

    如果我不对“/”进行编码,则它会充当分隔符=>那里没有运气。 如果我用Url.Encode()编码它,我最终得到%2F =>代码400 如果我用HttpUtility.UrlEncode()编码它,我最终得到%25 =>代码400

    因为400甚至没有通过asp.net-mvc,路由调试器是没用的:(

6 个答案:

答案 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)