2013-05-31 30 views
6

首先,我已經閱讀了許多文章,我可以找到關於這個主題,並安裝了幾個「路由調試」插件。我對Java/Spring更加熟悉,所以我真的不知道如何使用vs 2012來調試這個東西。(我不能讓IISExpress打印任何調試,更不用說用於Spring/Tomcat的調試輸出類型)另一個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 } 
    ); 
    } 
} 

現在,我可以通過默認控制器進入索引頁面。不過,我想打URL /的WebAPI /元/基於以下控制器:

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

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

「途徑調試」 說我的請求/的WebAPI /元數據/的WebAPI /元/,/的WebAPI /元/ 0,更要「投其所好」,但我得到的是404

EDIT1:我終於找到了跟蹤日誌,並得到了更多的細節:

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

回答

5

確保您使用的是目前的最新版本的Visual Studio 2012與更新2等。 你不應該只App_Start一個RouteConfig.cs文件中,也有一個WebApiConfig的.cs文件

因此而正常MVC路由使用

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

在Web API使用我們的RouteConfig類bApiConfig,它與開箱代碼掐滅在靜態類WebApiConfig以上建議:

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

您需要註冊路線使用基於ApiController的路由的MapHttpRoute擴展。例如:

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

BTW,什麼是BreezeController,爲什麼它裝飾在WebApiController?

+0

http://www.breezejs.com/ –

+0

真棒,那工作!我不知道mapRoute和MapHttpRoute有什麼不同。 –

+3

@BrockNoland歡迎來到ASP.NET Web API與ASP.NET MVC混淆的世界。兩個完全不同的框架,打包在一起,看起來非常相似,「以緩解學習曲線」。 –