6

为什么此 url 解析为 400 - Bad Request?

http://localhost:2785/api/ticker/Web.App.QuotesReaders/search=se%3Aabb

我的环境是 Visual Studio 2010,MVC 4,使用的控制器是 WebApiController。

%3A 是 URL 编码的冒号。

解决方案

这出于某种原因:

http://localhost:2785/api/ticker?className=Web.App.QuotesReaders&search=se%3Aabb

...这意味着,我无法在 global.asax.cs 中指定此路线:

/api/ticker/{className}/{search}

……也不是这个……

/api/ticker/{className}/search={search}

... 但是这个 ...

/api/ticker

更多信息:http ://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

4

1 回答 1

8

似乎 ASP.net 不允许在“?”之前使用冒号。在 URL 中,即使它被编码为 %3A。

例如,这些不起作用

http://foo.org/api/persons/foo:bar http://foo.org/api/persons/foo%3abar

但这有效: http: //foo.org/api/persons?id=foo%3abar

在所有示例中,我们希望 ASP.NET MVC 将“foo:bar”作为 id 参数传递,并正确解码。我刚刚用 MVC4 测试了这个,它似乎工作。令人讨厌的是它不接受问号之前的 URL 编码,但我确信这是有充分理由的。可能将问号之前的所有内容保留为有效的 URL 以及问号之后的任何参数。

于 2012-08-20T11:41:40.007 回答