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
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}")
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
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
Edytowana odpowiedź jest nieco jaśniejsza. Właśnie to mnie potknęło, znalazłem 'MapHttRoute', ale nie było to dla' RouteCollection' –
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.
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ę. –
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
Dzięki, to pytanie jest dość wysokie w wynikach Google dla MapHttpRoute. Dokładnie to, czego potrzebowałem. – Mourndark
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. –
@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? –
Tak, oba są wymienione w referencjach do projektu. –