Schwierigkeiten beim DatumUhrzeit-parameter zurück zum web-service, GET
Ich erstellte eine web-service unter Verwendung von ASP .NET-Web-API. Die Methode ist:
[HttpGet]
[Route("service/{applicantUser}/{lastUpdate:datetime?}")]
public IHttpActionResult getService(String applicantUser, DateTime? lastUpdate = null){
//some stuff here
}
Wenn ich den Anruf der WS auf diese Weise:
http://myserver/api/service/myusername/2008-12-10
alles funktioniert gut, und ich um eine korrekte json-Datei. Aber wenn ich versuche, um die Zeit:
http://myserver/api/service/myusername/2008-12-10T12:30:00
Ich erhalten den Fehler 404 - Bad Request
Funktioniert diese URL funktioniert:
Oh, ja, Es funktioniert. Aber, gibt es eine Möglichkeit für vermeiden RPC-Stil?
http://myserver/api/service/myusername/?lastUpdate=2008-12-10T12:30:00
Oh, ja, Es funktioniert. Aber, gibt es eine Möglichkeit für vermeiden RPC-Stil?
InformationsquelleAutor GVillani82 | 2014-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist das problem mit dem Doppelpunkt (
:
) Zeichen in der URL nicht erlaubt ist. Sie können entweder die parameter in der Abfrage-string:Oder deaktivieren Sie die Validierung zu überprüfen potenziell gefährlich Anfrage Pfade durch das Zusammenführen dieser zu Ihrem
web.config
:Ich nehme auch an, es ist für einen sehr guten Grund. Aber, besser, machen Sie sich Ihre eigene Meinung und Lesen Sie die Dokumentation msdn.microsoft.com/en-us/library/hh882339(v=vs. 110).aspx
InformationsquelleAutor DavidG
Leider ist der Doppelpunkt (:) ist, was Sie Ihrem bad request-error-es ist ein aktives Zeichen in das url-schema.
Müssen Sie einen Weg finden, zu Deserialisieren oder es akzeptieren als parameter ohne den Doppelpunkt, oder alternativ können Sie versuchen Sie und analysieren Sie Ihr Datum aus einem Anker (#) als url geparst werden können, sicher mit einem Doppelpunkt innerhalb eines Ankers. eg:
http://myserver/api/service/myusername#2008-12-10T12:30:00
Route("service/{applicantUser}#{lastUpdate:datetime?}")
Wirklich? Ziemlich sicher, dass alles nach dem
#
wird nicht an den server übergeben werden.Ich habe versucht, mit # , aber es funktioniert immer noch nicht
Du hast Recht! Mein Fehler - zum Glück, es scheint, Sie kann auch einen Doppelpunkt innerhalb eines querystring, die wird an den server geschickt werden, also wäre das:
http://myserver/api/service/myusername?t=2008-12-10T12:30:00
InformationsquelleAutor Rob Hardy
Als meine Vorgänger bereits erwähnt haben, richtig, das ":" Zeichen, die den Fehler verursacht.
Einen Weg um dies zu umgehen ist die Verwendung von URL-kodierte Parameter. Also, wenn Sie versuchen, die lastUpdate parameter von hand:
Verwenden Sie "%3A" statt des ":" (Doppelpunkt), die URL-kodierte Darstellung der Doppelpunkt.
Fall, dass Sie den Bau der Strecke innerhalb einer Anwendung:
HttpUtility.UrlEncode()
ist Ihr Freund.
InformationsquelleAutor Chris
Wenn Sie nicht möchten, deaktivieren Sie Sicherheits-Einstellungen, die Sie senden können, DateTime als string, ohne potenziell gefährlich-Symbole. Senden Zeichenfolge wie diese:
Und dann analysieren es auf controller-Seite mit Ihrem speziellen Muster:
InformationsquelleAutor Merchezatter