2013-05-31 13 views
6

Po pierwsze przeczytałem tyle artykułów, ile mogę znaleźć na ten temat i zainstalowałem kilka wtyczek "route debug". Jestem bardziej zaznajomiony z Javą/Springem, więc naprawdę nie mam pojęcia, jak to debugować, używając vs 2012. (I tak nie mogę sprawić, żeby druk IISExpress był jakikolwiek debug, a tym bardziej taki rodzaj debugowania, do którego przywykłem Spring/Tomcat .)Jeszcze nie znaleziono innej trasy ASP.Net WebAPI

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 } 
    ); 
    } 
} 

Teraz jestem w stanie trafić na stronę Indeksu za pomocą domyślnego kontrolera. Jednak staram się trafić URL/WebAPI/Metadata/na podstawie poniższego regulatora:

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

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

"szlakiem Debugger" mówi, że moje prośby o/WebAPI/metadanych/WebAPI/Metadata /,/WebAPI/Metadata/0, a powinna "dopasować", ale wszystko mogę to 404.

Edit1: w końcu znalazłem dzienniki śledzenia i dostał trochę więcej szczegółów:

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

Odpowiedz

5

Pamiętaj używasz aktualny najnowszą wersję Visual Studio 2012 z Aktualizacja 2 etc .. Należy nie tylko mają RouteConfig.cs plik w App_Start, ale jest tam również WebApiConfig .cs plik

więc gdy normalne trasy MVC użyć klasy RouteConfig

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 } 
     ); 
    } 
} 

API Web używa My bApiConfig, który jest zgaszone z out kodu skrzynki zasugerowano powyżej w statycznej klasy WebApiConfig:

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

trzeba by zarejestrować tras przy użyciu rozszerzenia MapHttpRoute dla tras opartych na programie ApiController. Przykład:

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

BTW, co jest BreezeController i dlaczego jest urządzone na WebApiController?

+0

http://www.breezejs.com/ –

+0

Awesome, że działa! Nie wiedziałem, że było inaczej między mapRoute i MapHttpRoute. –

+3

@BrockNoland Witamy w mylącym świecie ASP.NET Web API vs ASP.NET MVC. Dwie zupełnie różne struktury, spakowane razem i stworzone, aby wyglądały bardzo podobnie "w celu ułatwienia uczenia się". –

Powiązane problemy