2013-09-03 64 views
8

Tôi có một ứng dụng Biểu mẫu web mà tôi đã tạo một vài tháng trước và tôi đã thêm bộ điều khiển API Web. Tôi đã thử sử dụng định tuyến 'tự động' mà tôi đã thấy trong bản trình bày gần đây, nhưng tất cả những gì tôi nhận được là 404. Sau đó, tôi đã cố thêm định tuyến cho bộ điều khiển API Web trong Global.asax bằng cách sử dụng MapHttpRoute, như tôi đã thấy một số hướng dẫn. Tuy nhiên, ngay cả sau khi thêm Imports System.Web.Http vào tệp, dự án sẽ không nhận ra RouteTable.Routes.MapHttpRoute() Tôi đã thử thêm các không gian tên khác và đảm bảo rằng tôi có tất cả các gói Nuget cần thiết, nhưng tôi vẫn không thể thiết lập định tuyến cho bộ điều khiển API Web. Có ai có một đề nghị về nơi để bắt đầu?Tôi làm cách nào để truy cập RouteTable.Routes.MapHttpRoute?

Trả lời

9

tôi thấy this thread, mà chỉ ra rằng IntelliSense dường như có một vấn đề với điều này, nhưng nếu bạn gõ một cái gì đó như sau, nó sẽ xây dựng và chạy:

RouteTable.Routes.MapHttpRoute("MyApi", "api/{controller}") 
1

Tôi vừa tạo hai ứng dụng webforms mới (một sử dụng .NET 4, 4.5 khác), không làm gì hơn là thêm api web qua nuget và nó hoạt động.

Phiên bản ASP.NET nào là ứng dụng của bạn đang chạy? Nếu bạn đang chạy ASP.NET WebForms 2.0/3.5 thì nó không được hỗ trợ.

Dưới đây là một hướng dẫn mà minh họa cách thêm Web API để ứng dụng Web Forms của bạn - http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-aspnet-web-forms

+0

Cảm ơn câu trả lời. Tôi đang sử dụng .NET 4.5 với Visual Studio 2012. Hướng dẫn đó thực sự là một hướng dẫn mà tôi đã xem xét, nhưng khi tôi đến bước "Thêm thông tin định tuyến", tôi không thể thiết lập định tuyến. –

+1

@probackpacker Cách kỳ quái. Nếu bạn xem các tham chiếu thực sự cho dự án ứng dụng web của mình, bạn có thể thấy System.Web.Http và System.Web.Http.WebHost được liệt kê không? –

+0

Có, cả hai đều được liệt kê trong tài liệu tham khảo cho dự án. –

11

Bạn nên thêm tài liệu tham khảo để System.Web.Http.WebHost lắp ráp và đảm bảo bạn có

using System.Web.Http; 

Tại sao? MapHttpRoute được quy định tại hai quốc hội, trong System.Web.Http:

public static System.Web.Http.Routing.IHttpRoute MapHttpRoute(
    this System.Web.Http.HttpRouteCollection routes, string name, string routeTemplate) 

viên System.Web.Http.HttpRouteCollectionExtensions

và trong System.Web.Http.WebHost

public static Route MapHttpRoute(
    this RouteCollection routes, string name, string routeTemplate, object defaults); 

Đầu tiên là một mở rộng trên HttpRouteCollection

Sec ond một là một mở rộng trên RouteCollection

Vì vậy, khi bạn có một ứng dụng webforms, tuyến đường của bạn được định nghĩa trong một RouteCollection vì vậy bạn cần phiên bản WebHost.

Kiến trúc của nó cho phép WebApi cũng được lưu trữ ngoài IIS. thấy Hosting WebApi

+0

Câu trả lời đã chỉnh sửa trở nên rõ ràng hơn một chút. Đây là những gì vấp tôi lên, tôi đã tìm thấy 'MapHttRoute' nhưng nó không phải cho' RouteCollection' –

12

Nếu ai có cùng vấn đề này trong C# đã đọc.

Tôi cũng đang sử dụng ứng dụng biểu mẫu web và đặt định tuyến thông qua tệp Global.asax. Đối với tôi Intellisense là chính xác 100% và nó sẽ không xây dựng bất kể. Để có được điều này để làm việc tôi đã phải thêm những điều sau đây bằng cách sử dụng chỉ thị.

using System.Web.Http; 

using System.Web.Routing; 

becareful không sử dụng using System.Web.Http.Routing một cách tình cờ. Điều này sẽ không hoạt động.

+0

Bạn dường như đang sử dụng C# trong khi dự án của tôi sử dụng VB, để có thể giải thích sự khác biệt. –

+0

Điểm tốt. Tôi không nhận thấy thẻ vb. Tôi sẽ chỉnh sửa câu trả lời này trong trường hợp bất kỳ người dùng C# nào khác có thể nhận được một số giá trị từ nó. – spryce

+0

Cảm ơn, câu hỏi này khá cao về kết quả của Google cho MapHttpRoute. Chính xác những gì tôi cần. – Mourndark