2012-04-08 3 views
4

Warum löst diese URL in 400 auf - Bad Request?URL-kodierter Doppelpunkt löst in 400 auf Fehlerhafte Anfrage

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

Meine Umgebung Visual Studio 2010 ist, MVC 4 und die Steuerung verwendet wird, ist ein WebApiController.

% 3A ist ein URL-codierter Doppelpunkt.

SOLUTION

Das aus irgendeinem Grund funktioniert:

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

... was bedeutet, konnte ich diesen Weg in global.asax.cs nicht angeben:

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

... noch dies ...

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

... aber ...

/api/ticker 

Für weitere Informationen: http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

+0

Meinen Sie "search = s3% 3Aabb"? – McGarnagle

+0

Bridget: http://stackoverflow.com/questions/2593156/how-can-i-send-a-get-request-containing-a-colon-to-an-asp-net-mvc2-controller/2593364#2593364 – Cheeso

+0

@dbaseman Nein, ich wollte das nicht schreiben. –

Antwort

6

Es scheint, dass ASP.net nicht erlaubt Doppelpunkte vor dem '?' in einer URL, auch wenn es als% 3A codiert ist.

Zum Beispiel diese wird nicht funktionieren

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

Aber das funktioniert: http://foo.org/api/persons?id=foo%3abar

In allen Beispielen, würden wir erwarten, dass ASP.NET MVC „foo passieren: bar "als ID-Argument, richtig dekodiert. Ich habe das gerade mit MVC4 getestet und es scheint zu funktionieren. Es ist ärgerlich, dass die URL-Codierung vor dem Fragezeichen nicht akzeptiert wird, aber ich bin mir sicher, dass es einen guten Grund dafür gibt. Wahrscheinlich, um alles vor dem Fragezeichen zu halten, eine gültige URL und alle Argumente nach dem Fragezeichen.

Verwandte Themen