2015-02-22 16 views
5

i-Setup haben die Strecke zu sein: [Weg ("{id}/users/Suche/{Suche}")] und die damit verbundene Aktion: SomeAction (int id, Zeichenkette Text)Web Api 2 leere String-Parameter GET

Der Dienst hat die folgende Funktion. für die Ressource mit id = {id} und die Benutzer dieser Ressource erhalten die Benutzer, die mit dem Begriff {search} übereinstimmen (Benutzername, E-Mail usw.).

Die {Suche} kann einen Wert haben, so dass der Service nur die übereinstimmenden Entitäten zurückgibt oder keinen Wert hat (leere Zeichenfolge oder Null), sodass der Service alles zurückgibt.

Für den Teil mit einem Wert funktioniert es gut. Für den zweiten Teil kann ich nichts finden, um die get-Anfrage zu setzen, die mit der leeren Zeichenfolge übereinstimmt.

habe ich versucht, die folgenden: 1/Benutzer/search/null {Suche} = "null" 1/users/Suche/entsprechen 1/Benutzer keine Route/Suche hat keine Route überein

jemand einen Hinweis, wie das gemacht werden könnte?

Update: Ich habe versucht, die Aktion zu ersetzen: SomeAction (int id, string text) mit: SomeAction (Modell Modell), in dem Modell

public class ApplicationUserSearchModel 
{ 
    [Required] 
    public int Id { get; set; } 
    [Required(AllowEmptyStrings = true)] 
    public string MatchText { get; set; } 
} 

ohne Glück ist, da ich nicht tun wissen, was zu senden ist, um die URL zu diesem zu passen.

Antwort

4

Sie sollten Ihren search Parameter mit ? markieren, um es als optional in der Route zu markieren, und standardmäßig auf null in Ihrer Aktion festlegen.

[Route("{id}/users/search/{search?}")] 
public HttpResponseMessage Search(int id, string search = null)  

Ich dachte ursprünglich die Route/action Parameternamen das Problem waren, aber ich war nicht korrekt. Hier ist die vorherige Antwort:

Die Parameternamen in Ihrer Routendefinition und Ihre Aktion stimmen nicht überein, was Ihr Problem verursacht.

[Route("{id}/users/search/{search}")] 
public HttpResponseMessage Search(int id, string text) 

Sie sollen die string Parameter in Ihrer Aktion text-search aktualisieren, in Ihrem Route Attribute der Parameternamen übereinstimmen.

+0

das Problem ist nicht der Dienst selbst. das funktioniert gut. Bei der oben genannten Route, wie nennt man diesen Service mit der {Suche} Bindung an einen leeren String ist die Frage! – Mantzas

+0

Ich werde es versuchen, aber ich denke, ich habe schon ohne Glück. Noch weiß ich nicht, wie man den Dienst anruft, um dieses Ergebnis zu erhalten. Irgendeine Einsicht, wie du es machst, da deine scheinen zu arbeiten? – Mantzas

+0

Sie können auf diese Route zugreifen, indem Sie anrufen GET http: // Website/1234/Benutzer/Suche oder GET http: // Website/1234/Benutzer/Suche/Vorname% 20lastname – MattHughesATL