2013-09-03 21 views
8

Mam aplikację Web Forms, którą utworzyłem kilka miesięcy temu i dodałem kontroler Web API. Próbowałem użyć "automatycznego" routingu, który widziałem ostatnio w prezentacji, ale wszystko co miałem to 404. Potem próbowałem dodać routing dla kontrolera Web API w moim Global.asax przy użyciu MapHttpRoute, jak widziałem w kilka samouczków. Jednak nawet po dodaniu do pliku Imports System.Web.Http, projekt nie rozpoznaje RouteTable.Routes.MapHttpRoute() Próbowałem dodać inne przestrzenie nazw i upewniając się, że mam wszystkie niezbędne pakiety Nuget, ale nadal nie mogę skonfigurować routingu dla kontrolera Web API. Czy ktoś ma zalecenie od czego zacząć?Jak uzyskać dostęp do RouteTable.Routes.MapHttpRoute?

Odpowiedz

9

znalazłem this thread, co oznacza, że ​​IntelliSense najwyraźniej ma problem z tym, ale jeśli wpiszesz coś jak poniżej, to zbudować i uruchomić:

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

Właśnie utworzyłem dwie nowe aplikacje do tworzenia webformów (jedna używająca .NET 4, druga 4.5), dodała api web poprzez nuget i zadziałało.

W jakiej wersji aplikacji ASP.NET działa aplikacja? Jeśli korzystasz z ASP.NET WebForms 2.0/3.5, nie jest to obsługiwane.

Oto poradnik, który pokazuje, jak dodać Web API do aplikacji Web Forms - http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-aspnet-web-forms

+0

Dzięki za odpowiedź. Używam programu .NET 4.5 z programem Visual Studio 2012. Samouczek to taki, którego szukałem, ale gdy przejdę do kroku "Dodaj informacje o routingu", nie mogę skonfigurować routingu. –

+1

@probackpacker Jak dziwacznie. Jeśli spojrzeć na rzeczywiste odniesienia do projektu aplikacji sieci Web, czy można wyświetlić System.Web.Http i System.Web.Http.WebHost na liście? –

+0

Tak, oba są wymienione w referencjach do projektu. –

11

należy dodać odniesienie do System.Web.Http.WebHost montaż i upewnij się, że

using System.Web.Http; 

Dlaczego? MapHttpRoute jest zdefiniowany w dwóch zespołach, w System.Web.Http:

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

Członek System.Web.Http.HttpRouteCollectionExtensions

aw System.Web.Http.WebHost

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

Pierwszy z nich to rozszerzenie na HttpRouteCollection

Sec ond jeden jest przedłużeniem na RouteCollection

Więc kiedy masz app WebForms, swoich tras są zdefiniowane w RouteCollection więc trzeba wersję WebHost.

Jest to spowodowane architekturą umożliwiającą hostowanie WebApi również poza IIS. zobacz Hosting WebApi

+0

Edytowana odpowiedź jest nieco jaśniejsza. Właśnie to mnie potknęło, znalazłem 'MapHttRoute', ale nie było to dla' RouteCollection' –

12

Jeśli ktoś ma ten sam problem C# czytaj dalej.

Używam również aplikacji formularzy internetowych i ustaw routing w pliku Global.asax. Dla mnie Intellisense było w 100% poprawne i nie zbudowałoby to niezależnie. Aby to zadziałało, musiałem dodać poniższe, używając dyrektyw.

using System.Web.Http; 

i

using System.Web.Routing; 

Becareful nie używać using System.Web.Http.Routing przez przypadek. To nie zadziała.

+0

Wygląda na to, że używasz C#, podczas gdy mój projekt używa VB, więc to może wyjaśnić różnicę. –

+0

Dobra uwaga. Nie zauważyłem tagu vb. Zmienię tę odpowiedź na wypadek, gdyby inny użytkownik C# mógł uzyskać z niej jakąś wartość. – spryce

+0

Dzięki, to pytanie jest dość wysokie w wynikach Google dla MapHttpRoute. Dokładnie to, czego potrzebowałem. – Mourndark

Powiązane problemy