0

Ich möchte eine einfache REST API für eine Funktionalität, die mein Webservice verfügbar macht.ASP.NET Web Api 2 - GET mit Parametern nicht unterstützt

[RoutePrefix("companies")] 
public class CompaniesController : BaseApiController { 

    [HttpGet, Route("{companyId:int}")] 
    public CustomResponse Get(int companyId) { } 

    [HttpPost] 
    public CustomResponse Post(CompanySaveViewModel model) { } 

    [HttpDelete, Route("{companyId:int}"] 
    public CustomResponse Delete(int companyId) { } 
} 

Ok, das sollte funktionieren. Die POST-Methode funktioniert einwandfrei. Allerdings, wenn ich zu nennen versuchen, GET und/oder Methoden DELETE, bekam ich die Meldung unter:

Ich versuche, diese Methoden rufen die angegebenen URLs:

http://localhost:11111/api/companies/1 [GET]

http://localhost:11111/api/companies/1 [Löschen]

enter image description here

POST funktioniert gut. Wenn ich versuche, GET ohne Parameter aufzurufen, funktioniert es auch gut. Das Problem tritt auf, wenn ich irgendeine Art von Parameter für GET/DELETE-Methoden habe. Was könnte das Problem hier sein?

Vielen Dank für die Hilfe!

+0

Entfernen Sie den 'RoutePrefix' und versuchen Sie das gleiche –

Antwort

2

Versuchen Sie, eine Route zu Ihrem POST Aktion hinzufügen:

[HttpPost, Route("")] 
public CustomResponse Post(CompanySaveViewModel model) { } 

Diese Konsistenz in Ihre Routing-Definitionen gewährleisten: entweder Sie Attribut based Routing, oder verwenden Sie die globale Konvention based Routing (persönlich ziehe ich es ausdrücklich Attribut basiertes Routing). Ich möchte Sie auch die zwei Arten von Routen Vermischung zu vermeiden, empfehlen und die Konvention basiert Route von Ihrer Konfiguration entfernen:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

Vergessen Sie auch nicht Attribut based Routing zu ermöglichen, wenn Bootstrapping:

config.MapHttpAttributeRoutes(); 

Hier ist eine nice overview von attributbasierten Routing, die ich Ihnen empfehlen würde, durchzugehen.

+0

Danke, @darin! Durch das Entfernen des Standard-HTTP-Routings begann es wie ein Zauber zu funktionieren. Ich denke, dass die Anwendung die Routing-Konvention missverstanden hat und nicht wusste, ob sie die Route-Konvention oder die Basis-definierte Konvention verwenden muss. Vielen Dank! – Kiwanax