2013-09-03 19 views
20

Mam projekt MVC 4 na szczycie aplikacji N-warstwowej. Teraz mam wymóg, aby móc programowo korzystać z aplikacji. Stworzyłem nowy projekt Web Api w ramach tego samego rozwiązania, które znajduje się obok projektu MVC, ponownie na szczycie aplikacji N-warstwowej.Projekty MVC i Web Api w ramach tego samego rozwiązania

Ale nie jestem pewien, jak to wszystko działa, ponieważ warstwa MVC jest projektem startowym: ustawia moje DI, automapper itp. I jest projektem, który wdrażam na serwerze.

Jak należy to wszystko skonfigurować? Czy mogę skonfigurować mój projekt MVC, aby skierować wszystkie żądania/api do nowego projektu Web Api? A może projekt Web Api musi zostać wdrożony osobno?

Nie chcę robić niczego niekonwencjonalnego, więc jeśli istnieje o wiele bardziej powszechny sposób na ustawienie tego, proszę wskazać mi właściwy kierunek.

Dzięki.

+1

Dlaczego to zostało zmienione? Co ulepszyłeś w stosunku do mojej oryginalnej publikacji? Rzeczywiście, wszystko, co zrobiliście, to podkreślenie różnych części, które nie wymagają podkreślania! – James

Odpowiedz

10

WebApi to alternatywna usługa zorientowana na usługi firmy Microsoft, podobnie jak WCF. Ale WCF używa protokołu SOAP, a WebAPI używa protokołu HTTP do komunikacji.

Więc jeśli używasz WCF do świadczenia usług dla twojej aplikacji MVC, osobiście hostowałbyś tę usługę wcf i korzystałaby z jej usługi przez aplikację MVC, dokładnie tak, jak musisz osobno hostować swój projekt WebAPI i zapewniać obsługę swojej aplikacji internetowej (MVC).

z pewnych powodów, jeśli chcesz je (MVC i WebAPI) używać w tym samym projekcie, postępuj zgodnie z tymi zasadami z tego artykułu.

http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx

+0

Tak więc aplikacja N-Tier powinna być rzeczywiście opakowana w Web Api, który pochłania projekt prezentacji MVC? Czy nie spowodowałoby to powolnego projektu MVC, biorąc pod uwagę, że musiałby wywoływać usługę internetową dla swoich danych? – James

+0

Co więcej, czy przeniesiesz projekt MVC do osobnego rozwiązania? – James

+2

Tak, musisz utworzyć/rozwinąć swój projekt webapi i projekt MVC osobno i udostępniać je osobno, jego dobry projekt i wysoce skalowalny. –

0

Wystarczy dodać kontrolerów routingu i API do istniejącej strony MVC, gdzie zostaną one dostępne pod site/api/

+0

Rozważałem umieszczenie obu w jednym projekcie, ale wydaje się, że komplikuje to projekt. Byłoby wspaniale zachować te dwie rzeczy oddzielnie. – James

8

po prostu zrobił to samo wczoraj. Mam w tym samym projekcie MVC 4 regularne kontrolery i ApiControllers.

Trzeba dodać routing w Global Asax dla WebAPI:

WebApiConfig.Register(GlobalConfiguration.Configuration); 

Spójrz na WebApiConfig:

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

Nie zapomnij także dodać Pakiety Nuget dla WebAPI (jeśli ich jeszcze nie masz). W moim przypadku ich nie miałem, ponieważ mój projekt był pierwotnie MVC 3, a później został ulepszony.

+0

Czy Twoja początkowa aplikacja nadal jest typu MVCapplication? Czy routing nie jest w żaden sposób sprzeczny? –

+1

@ IngóVals Tak Aplikacja MVC. Żadnych problemów. –

Powiązane problemy