2013-05-31 7 views
6

Zunächst einmal habe ich so viele Artikel gelesen, wie ich zu diesem Thema finden kann und mehrere "Route Debug" -Plugins installiert. Ich bin vertrauter mit Java/Spring, so dass ich wirklich keine Ahnung habe, wie man dieses Ding debuggt, mit vs 2012. (Ich kann sowieso nicht, dass IISExpress jedes Debugging druckt, viel weniger die Art der Debugausgabe, die ich mit Spring/Tomcat gewohnt bin .)Noch eine andere ASP.Net WebAPI Route nicht gefunden

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Legal", 
      action = "Index", 
      id = UrlParameter.Optional } 
    ); 
    } 
} 

Jetzt kann ich die Index-Seite über den Standard-Controller treffen. Aber ich versuche, die URL/WebAPI/Metadata/basiert auf den folgenden Controller zu treffen:

[BreezeController] 
public class WebApiController : ApiController { 
    private readonly EFContextProvider<BankruptcyDbContext> _contextProvider = 
    new EFContextProvider<BankruptcyDbContext>(); 

    [HttpGet] 
    public string Metadata() { 
    return _contextProvider.Metadata(); 
    } 
} 

Die "Route Debugger" sagt, dass meine Wünsche für/WebAPI/Metadaten/WebAPI/Metadata /,/WebAPI/Metadaten/0, und mehr „passen“ sollte aber alles, was ich bekommen ist 404.

Edit1: ich habe ein wenig mehr Details endlich die Trace-Protokolle gefunden und bekam:

The controller for path &amp;#39;/WebApi/Metadata&amp;#39; was not found or does not implement IController 

Antwort

5

Seien Sie sicher, dass Sie die aktuelle neueste Version von Visual Studio 2012 mit Update 2 usw. verwenden .. Sie sollten nicht nur eine RouteConfig.cs Datei in App_Start, aber es gibt auch eine WebApiConfig CS- Datei

So Während normale MVC Routen verwenden, um die RouteConfig Klasse

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

Der Web-API, die wir verwendet bApiConfig, die mit dem aus der Box Code Stub aus wird vorgeschlagen, oben in der statischen Klasse WebApiConfig:

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

Sie müssten Routen registrieren Verwenden der MapHttpRoute Erweiterung für ApiController-basierte Routen. Beispiel:

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

BTW, was ist BreezeController und warum ist es auf WebApiController dekoriert?

+0

http://www.breezejs.com/ –

+0

Awesome, das funktioniert! Ich wusste nicht, dass MapRoute und MapHttpRoute unterschiedlich sind. –

+3

@BrockNoland Willkommen in der verwirrenden Welt von ASP.NET Web API vs ASP.NET MVC. Zwei völlig unterschiedliche Frameworks, die zusammen verpackt und extrem ähnlich aussehen, um die Lernkurve zu erleichtern. –