2017-05-16 29 views
1

Ich habe eine MVC-Anwendung mit einer Indexseite (statische HTML) unter der Home-Ansicht. Ich könnte die Seite sehen. Der routeconfig ist:Routing funktioniert nicht - Webapi ASP.NET

Ich bin ein WebAPI-Controller hinzufügen und versuche, die Get aufrufen.

public class TopicsController : ApiController 
    { 
     public string Get() 
     { 
      return "Hello WebAPI"; 
     } 

    } 

Die Route config in WebAPI ist:

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

Added die Anwendung Start-Funktion:

protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 


      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      WebApiConfig.Register(GlobalConfiguration.Configuration); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
     } 

Wenn ich versuche, die folgenden:

http://localhost:11001/api/Topics

Ich erhalte der folgende Fehler:

Nicht gefunden :( Sorry, aber die Seite, die Sie anzeigen wollten, existiert nicht.

+0

Bitte können Sie uns zeigen, zu ändern, wie Ihre config.Routes.MapHttpRoute() wird aufgerufen? Wird es aus der Global.asax-Datei Ihrer Anwendung aufgerufen? – Luke

+0

@Luke Ich habe die Anwendung Startfunktion hinzugefügt –

Antwort

1

Try Registrierung bestellen in Global.asax

AreaRegistration.RegisterAllAreas(); 
WebApiConfig.Register(GlobalConfiguration.Configuration); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 
BundleConfig.RegisterBundles(BundleTable.Bundles); 
1

Werfen Sie einen Blick auf die Standard-Projekt von Visual Studio, werden Sie feststellen, dass die Reihenfolge Sie die Routen hinzufügen sehr wichtig ist, weil ‚api/Themen‘ algo die mvc Route übereinstimmt, weshalb es Sie, dass es sagt existiert nicht, weil du keinen 'api' Controller hast.

ändern es dazu:

AreaRegistration.RegisterAllAreas(); 
WebApiConfig.Register(GlobalConfiguration.Configuration); 
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
RouteConfig.RegisterRoutes(RouteTable.Routes); 
BundleConfig.RegisterBundles(BundleTable.Bundles); 

überlassen Sie den Rest, wie Sie es haben

EDIT:

die Antwort aktualisiert die WebAPI Version von der Frage zu reflektieren.

Aber in der letzten Version von WebAPI:

WebApiConfig.Register(GlobalConfiguration.Configuration); 

sollte sein:

GlobalConfiguration.Configure(WebApiConfig.Register); 
+0

GlobalConfiguration.Configure (WebApiConfig.Register); Fehlermeldung "Fehler Nicht-invokable Mitglied 'System.Web.Http.GlobalConfiguration.Configuration' kann nicht wie eine Methode verwendet werden.". Außerdem konnte ich die GlobalConfiguration.Configure-Methode nicht finden, stattdessen war nur die Konfiguration verfügbar. –

+0

Wahrscheinlich ist eine Angelegenheit von mvc-Versionen: WebApiConfig.Register (GlobalConfiguration.Configuration) verwenden; –