URL encoded colon resolves in 400 Bad Request

a 夏天 提交于 2019-11-26 21:55:26

问题


Why does this url resolve in 400 - Bad Request?

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

My environment is Visual Studio 2010, MVC 4 and the controller used is a WebApiController.

The %3A is an URL-encoded colon.

SOLUTION

This works for some reason:

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

... which means, I couldn't specify this route in global.asax.cs:

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

... nor this ...

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

... but this ...

/api/ticker

For further information: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx


回答1:


It seems that ASP.net does not allow colons before the '?' in an URL, even if it is encoded as %3A.

For example, these won't work

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

But this works: http://foo.org/api/persons?id=foo%3abar

In all examples, we would expect ASP.NET MVC to pass "foo:bar" as an id argument, properly decoded. I just tested this with MVC4 and it seems to work. It is annoying that it doesn't accept the URL encoding before the question mark though, but I'm sure there is a good reason for it. Probably to keep everything before the question mark a valid URL and any arguments after the question mark.



来源:https://stackoverflow.com/questions/10066188/url-encoded-colon-resolves-in-400-bad-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!