2016-04-21 4 views
0

Ich füge Methoden zu einem zusätzlichen Web-API-Controller hinzu. Wenn ich eine der vorhandenen Methoden ausprobiere, kann ich meine Breakpoints erreichen. Wenn ich jedoch versuche, einen der neuen zu verwenden, erhalte ich einen 404. Ich teste lokal mit IIS Express und Postman. Beispiele unten, irgendeine Idee, was könnte das verursachen?Der Web-API-Controller erkennt neu hinzugefügte Methoden nicht

Wenn ich versuche, den neuen Endpunkt zu nennen dies die Antwort, die ich erhalten:

{"Message":"No HTTP resource was found that matches the request URI 'http://localhost:53453/api/nisperson/addnewconnection'.", 
"MessageDetail":"No action was found on the controller 'NISPerson' that matches the request."} 

Bestehende Methode:

[HttpPost] 
[ActionName("register")] 
public ClientResponse PostRegisterPerson(HttpRequestMessage req, PersonModel person) 
{ 
    // This method is getting hit if I call it from Postman 
} 

Endpunkt:http://localhost:53453/api/test/register

Neu hinzugefügt Methode:

[HttpPost] 
[ActionName("addnewconnection")] 
public ClientResponse PostNewConnection(HttpRequestMessage req, string Email, String FirstName, string LastName) 
{ 
    // This is the new method which when called from Postman cannot be found. 
} 

Endpunkt:http://localhost:53453/api/test/addnewconnection

+0

Sie vermissen "" um addnewconnection –

+0

Hinzugefügt die Zitate, in der tatsächlichen Code sind sie da. Ich habe einen Typ erstellt, während ich die Frage zu StackOverflow hinzugefügt habe. –

+0

Bei der Deklaration von Routen verwende ich normalerweise eine voll qualifizierte Route [ActionName ("ReIndex")] [Route ("api/Autocomplete/Reindex")] –

Antwort

2

Sie definiert drei erforderlich Parameter in Ihrer Methode Signatur (Email, FirstName und LastName):

[HttpPost] 
[ActionName("addnewconnection")] 
public ClientResponse PostNewConnection(HttpRequestMessage req, string Email, String FirstName, string LastName) 
{ 
    // This is the new method which when called from Postman cannot be found. 
} 

Die Route Handler diesen URI nicht abbilden : http://localhost:53453/api/test/addnewconnection zu Ihrer Methode, weil Sie diese drei Requir nicht zur Verfügung stellen Ed-Parameter.

Die korrekte URI (Abfahrt Ihre Methode wie) tatsächlich die folgenden:

http://localhost:53453/api/test/addnewconnection?Email=foo&FirstName=bar&LastName=baz 

Entweder diese Parameter innerhalb der URI bereitzustellen, wie sie gezeigt oder drehen wie kein Standardwert erforderlich Bereitstellung:

[HttpPost] 
[ActionName("addnewconnection")] 
public ClientResponse PostNewConnection(HttpRequestMessage req, string Email = null, String FirstName = null, string LastName = null) 
{ 
    // This is the new method which when called from Postman cannot be found. 
} 

Wenn Sie einen Standardwert angeben, können Sie Ihre Methode mit dem ursprünglichen URI ausführen.

+0

Danke! Ich bin so daran gewöhnt, Model-Objekte zu übergeben, von denen ich nicht wusste, dass dies bei einfachen Typen erforderlich ist. –

1

Der Grund ist, dass erwartet wird, dass andere Parameter (einfache Stringtypen) in Querystring bereitgestellt werden, die Sie nicht liefern. Es versucht also, Post mit einem einzelnen Parameter aufzurufen und es nicht zu finden. Einfache Typen werden standardmäßig aus dem URI gelesen. Wenn Sie möchten, dass sie vom Formularkörper lesen, verwenden Sie das FromBody-Attribut.

Verwandte Themen