2016-03-23 6 views
1

Ich versuche, einen selbst gehosteten WebAPI-Server zu schreiben. Ich möchte, dass alle Routen zu einem einzigen Controller gehen. Dieser Controller kann den Controller-Teil der URL auswählen und diesen verwenden, um eine geeignete Antwort zu bestimmen.WebApi hart codierte Controller-Routing

Ich habe die folgende Route Konfiguration:

_configuration.Routes.MapHttpRoute 
(
    name: "DefaultApi", 
    routeTemplate: string.Concat("api/Home", "/{id}"), 
    defaults: new { id = RouteParameter.Optional, controllerName="Home" } 
); 

Meine Controller-Klasse ist "Homecontroller" bezeichnet. Ich versuche, alle URLs darauf umzuleiten.

Hier ist der Code für HomeController. Für jetzt habe ich die Anrufe zu externer Logik (Fernbedienung) auskommentiert. Es sollte nur eine Zeichenfolge auf der Get-Aktion zurückgegeben werden.

public class HomeController : ApiController 
{ 
    private IExternalController<string> remoteController; 

    public HomeController() 
    { 
     remoteController = GlobalKernelConfiguration.GetStandardKernel().Get<IExternalController<string>>(); 
    } 

    public string Get() 
    { 
     return "HELLO FROM INTERNAL"; //remoteController.Get(); 
    } 

    public string Get(int id) 
    { 
     return remoteController.Get(id); 
    } 

    public void Delete(int id) 
    { 
     remoteController.Delete(id); 
    } 

    public void Post(string value) 
    { 
     remoteController.Post(value); 
    } 

    public void Put(int id, string value) 
    { 
     remoteController.Put(id, value); 
    } 
} 

würde ich http://localhost:9000/api/[AnythingHere] auf dem Weg zum Heimsteuerung erwarten würde, aber ich bekomme die folgende Fehlermeldung, wenn Sie die folgende URL versuchen: http://localhost:9000/api/Home

{ „message“: "Keine HTTP-Ressource gefunden wurde, der die Anforderung URI übereinstimmt 'http://loca lhost: 9000/api/Haus' "" MessageDetail. ":" Keine Route einen Controller Namen Bereitstellung wurde gefunden Anforderungs-URI 'http://localhost:9000/api/Home' "gefunden}

+0

Also, was macht das oder was nicht? – CodeCaster

+0

@CodeCaster Ich ging, um die Header-Informationen aus meiner Konsolenanwendung zu drucken, und ich entdeckte einen Fehler. Ich habe es an die Frage angehängt. –

+0

Ist Ihr 'HomeController' ein' ApiController'? – CodeCaster

Antwort

1

Wie @CodeCaster in den Kommentaren vorgeschlagen, das Problem Wurde verursacht durch nicht den richtigen Parameter in den Routing-Optionen verwenden.

Dies ist, was ich vor

hatte

_configuration.Routes.MapHttpRoute ( name: "DefaultApi", routeTemplate: string.Concat("api/Home", "/{id}"), defaults: new { id = RouteParameter.Optional, controllerName="Home" } );

das ist, was ich habe jetzt:

 public static void AddControllerRoute(string controllerName) 
    { 
     _configuration.Routes.MapHttpRoute 
      (
       name: "DefaultApi", 
       routeTemplate: string.Concat("api/Home", "/{id}"), 
       defaults: new { id = RouteParameter.Optional, controller ="Home" } 
      ); 
    } 

feststellen, dass die Standardwerte Parameter geändert und verwendet nun "Controller" anstelle von „controller "Das hat das Problem gelöst und es funktioniert jetzt.

Verwandte Themen