2013-05-31 31 views
6

Trước hết tôi đã đọc nhiều bài viết như tôi có thể tìm thấy về chủ đề này và cài đặt một số plugin "sửa lỗi tuyến đường". Tôi quen thuộc hơn với Java/Spring vì vậy tôi thực sự không có ý tưởng làm thế nào để gỡ lỗi điều này, sử dụng vs 2012. (Tôi không thể anyway để làm cho IISExpress in bất kỳ gỡ lỗi ít hơn nhiều loại đầu ra gỡ lỗi tôi đang sử dụng với Spring/Tomcat .)Tuy nhiên, một tuyến đường ASP.Net WebAPI khác không tìm thấy

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

Bây giờ, tôi có thể nhấn trang Chỉ mục thông qua bộ điều khiển mặc định. Tuy nhiên, tôi đang cố gắng để đạt URL/WebAPI/Metadata/dựa trên bộ điều khiển sau:

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

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

Các "Route Debugger" nói rằng yêu cầu của tôi cho/WebAPI/Metadata,/WebAPI/Metadata /,/WebAPI/Metadata/0, và nhiều hơn nữa nên "phù hợp", nhưng tất cả tôi nhận được là 404.

Edit1: Cuối cùng tôi tìm thấy dấu vết các bản ghi và có một chút chi tiết hơn:

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

Trả lời

5

Hãy chắc chắn bạn đang sử dụng phiên bản hiện tại mới nhất của Visual Studio 2012 với Cập nhật 2 vv .. Bạn không nên chỉ có một RouteConfig.cs tập tin trong App_Start, nhưng cũng có một WebApiConfig cs tập tin

Vì vậy, khi tuyến đường MVC Bình thường sử dụng lớp 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 được sử dụng Chúng tôi bApiConfig, được stubbed ra với ra của mã hộp gợi ý ở trên trong lớp WebApiConfig tĩnh:

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

Bạn sẽ cần phải đăng ký tuyến sử dụng phần mở rộng MapHttpRoute cho các tuyến dựa trên ApiController. Ví dụ:

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

BTW, BreezeController là gì và tại sao nó được trang trí trên WebApiController?

+0

http://www.breezejs.com/ –

+0

Awesome, mà làm việc! Tôi không biết có sự khác nhau giữa mapRoute và MapHttpRoute. –

+3

@BrockNoland Chào mừng bạn đến với thế giới khó hiểu của ASP.NET Web API và ASP.NET MVC. Hai khung công tác hoàn toàn khác nhau, được đóng gói cùng nhau và được tạo ra để trông cực kỳ giống nhau "để làm dịu đường cong học tập". –

Các vấn đề liên quan