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 では、「?」の前にコロンを使用できないようです。%3A としてエンコードされている場合でも、URL で。

たとえば、これらは機能しません

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 が適切にデコードされた id 引数として "foo:bar" を渡すことが期待されます。これをMVC4でテストしたところ、うまくいくようです。クエスチョン マークの前の URL エンコーディングを受け付けないのは面倒ですが、それには十分な理由があると確信しています。おそらく、疑問符の前のすべてを有効な URL と疑問符の後の引数に保持するためです。

于 2012-08-20T11:41:40.007 に答える