2012-03-24 11 views
2

Ich folgte diesem Tutorial http://www.tugberkugurlu.com/archive/api-key-authorization-through-query-string-in-asp-net-web-api-authorizationfilterattribute , um benutzerdefinierte Autorisierungsfilter zu erstellen.Autorisieren Sie Anfrage in ASP.NET Web API basierend auf bestimmten Benutzer

I CarController mit meiner benutzerdefinierten Autorisieren Attribut haben: [ApiKeyAuth ("apikey", typeof (ApiKeyAuthorizer))]

Ich schicke zwei Parameter in der URL .. Host/Auto/4 username = xxx & Pass = xxx Es funktioniert grundsätzlich gut, aber ich möchte nur Autobesitzer Informationen über ihre Autos sehen lassen. Zum Beispiel Benutzer ABC kann nur Host/Car/5 sehen und Benutzer DEF kann Host/Car/6 und Host/Car/10 sehen Wie kann ich dieses Szenario lösen? Wie kann ich in meinem ApiKeyAuthorizer auf die ID des Fahrzeugs zugreifen, das in der Abfrage (Host/Car/ID) verwendet wird?

Grüße

Antwort

1

Wenn man sich seinen Code aussehen, https://github.com/tugberkugurlu/ASPNETWebAPISamples/tree/master/TugberkUg.Web.Http/src/samples und https://github.com/tugberkugurlu/ASPNETWebAPISamples/tree/master/TugberkUg.Web.Http/src/TugberkUg.Web.Http, ich glaube, Sie werden feststellen, dass er die Daten direkt aus dem Query-String zerrt. Es sollte einfach darum gehen, diese Methode zu erweitern, um den ID-Parameter einzuziehen. Möglicherweise möchten Sie auch das RequestContentKeyValueModel für den HttpActionContext-Parameter überprüfen, der an die OnAuthorization-Methode übergeben wird. Die Dokumentation ist skizzenhaft und ich habe noch nicht damit gespielt, aber das scheint mir ein wahrscheinlicher Kandidat zu sein. Die Routendaten sind jedoch indirekt über die HttpRequestMessage über eine extension method, insbesondere:

message.GetRouteData();

+0

Ja, das ist, was ich gemacht habe, um sowohl Benutzername als auch Passwort für die Autorisierung zu übergeben. Ich möchte aber ID oder andere Parameter auf diese Weise nicht weitergeben. Ansonsten ist es wichtig ASP.NET Web API zu verwenden wenn ich sowieso alle Parameter selbst handhabe – Bart

+0

@Bart - Ich habe etwas mehr stochern und gefunden http://geekswithblogs.net/jdothoffman/archive/2012/03/06/mvc-4-beta-web-api-bug -with-binding-route-values.aspx, die uns näher bringt, aber Sie sollten in der Lage sein, die Routendaten direkt von der Anfrage über die GetRouteData-Erweiterung zu erhalten. Ich habe aktualisiert. – tvanfosson