2016-07-31 72 views
0

Ich verwende ASP.Net WebApi, das mit OData (mit ODataController) aktiviert ist.OData WebApi: Benutzerdefinierte Aktion funktioniert nicht

Ich habe eine Anforderung zu erfüllen, die ich brauche, um eine benutzerdefinierte Aktion hinzufügen, aber das funktioniert nicht, es sieht aus, ich habe etwas verpasst, kann jemand mich wissen lassen, wo ich falsch mache?

Vielen Dank im Voraus!

Im Folgenden sind Codeausschnitte meiner Implementierung.

Benutzerdefinierte Aktion

[HttpGet] 
[Queryable] 
public IQueryable<User> PersonalInfo() 
{ 
    int UserID = this.UserTicket.User_ID; 
    return _users.Queryable().Where(d => d.UserID == UserID); 
} 

Hinzufügen Aktion in ODataConfig

builder.EntitySet<User>(typeof(User).Name); 
ActionConfiguration personalInfo = builder.Entity<User>().Collection.Action("PersonalInfo"); 

generiert Metadaten

<FunctionImport Name="PersonalInfo" IsBindable="true" m:IsAlwaysBindable="true"> 
    <Parameter Name="bindingParameter" Type="Collection(Models.User)" Nullable="false"/> 
</FunctionImport> 

EDIT 1

ich verpasst, unten zu erwähnen ist der Fehler, den ich von der erwarteten URL erhalten:

keine HTTP-Ressource wurde gefunden, dass die Anforderungs-URI übereinstimmt ‚http://domain/odata/User/PersonalInfo‘.

+0

In welcher Weise ist es nicht funktioniert? – DavidG

+0

Haben Sie diese URL anstatt "http: // domain/odata/PersonalInfo" ausprobiert? – DavidG

+0

@DavidG gibt 'Die Ressource kann nicht gefunden werden' !! – ANKIT

Antwort

1

Ein OData Aktion ist immer verwendet das HTTP-Verb POST und ist in der Regel für Methoden, die eine Auswirkung auf den Server haben, aber Ihre Controller-Methode hat das HttpGet Attribut und es sieht aus wie Sie dies versuchen, mit einem GET zu nennen. Wenn ich anschaue, was die Methode tatsächlich macht (nur einige Daten abzurufen), denke ich, dass Sie eine OData-Funktion anstelle einer Aktion haben möchten. Um dies zu tun, ändern Sie einfach Ihre Action Anruf ein Function Aufruf wie folgt zu sein:

FunctionConfiguration personalInfo = builder.Entity<User>().Collection.Function("PersonalInfo"); 
+0

Funktion fehlt in meiner OData-Bibliothek, ist das spätestens? – ANKIT

+0

Noch nicht in der Lage Funktion Schlüsselwort zu finden, lassen Sie mich bitte wissen, ob das in der neuesten Bibliothek zur Verfügung steht? – ANKIT

+0

Welche OData-Version verwenden Sie? – TomDoesCode