2

기본 프런트 엔드 추가가 필요한 기존 webapi 2 애플리케이션이 있습니다. 기존 webapi 컨트롤러는 xController yController라는 Controllers 디렉토리 루트에 만들어졌습니다. 다음과 같은 경로를 각 컨트롤러 하나가 첨부 MVC 컨트롤러를 필요로MVC5/WEBAPI 2 HomeApiController를/homeapi가 아닌/api/home으로 라우팅합니다.

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{action}" 
      ); 

Controllers 
-XController.cs 
-YController.cs 

. 내가 뭘하고 싶은지 XApiController YApiController에 API 컨트롤러의 이름을 바꾸고 서비스의 기존 사용법을 보장하기 위해 라우팅을 사용합니다. 그런 다음 프런트 엔드에 표준 MVC 컨트롤러를 추가 할 수 있습니다.

+0

왜 MVC 컨트롤러가있는 Web API 응용 프로그램이 필요합니까? 웹 API는 서비스에 사용되고 MVC 앱은 이러한 서비스를 사용해야합니다. –

+0

배포 용으로 ElasticBeanstalk을 사용하고 있으므로 1 개의 애플리케이션 만 가질 수 있습니다. 나는 그것을 분할하고 2 개의 배치 파이프 라인과 중복 된 인프라의 비용을 생성하는 번거 로움이 없다고 생각합니다. –

답변

2

RoutePrefix 속성을 사용하면이 작업을 수행 할 수 있습니까? 원하는 컨트롤러를 호출하고 호스트의 위치를 ​​결정할 속성을 지정하면 컨트롤러 수준에서 라우팅을 제어하는 ​​데 장단점이 있지만 일반적인 사용 사례 인 것처럼 보입니다 (예 :

).
[RoutePrefix("api/home")] 
public class SomeHomeController: ApiController 
{ 
// ... 
} 
+0

각 작업에 Route 속성을 추가해야했지만이 작업 덕분에 감사했습니다. –

2

컨트롤러는 각 프레임 워크마다 별도의 유형이며 각 프레임 워크는 위치에 관계없이 (올바른 이름이있는 경우) 해당 프레임을 발견 할 수 있습니다. 원하는 결과를 얻기 위해 라우팅을 망칠 필요가 없습니다. 당신이 필요로하는 유일한 것은 (허용된다고 가정 할 때) 컨트롤러를 다른 네임 스페이스/폴더에 두어 같은 이름의 컨트롤러 2 개 (MVC와 Web API)를 가질 수 있습니다.

ApiControllers 
-XController 
-YController 
Controllers 
-XController 
-YController 

MVC 및 API 컨트롤러를 별도의 응용 프로그램으로 배포 할 수없는 경우에도 별도의 위치에 유지하는 것이 좋습니다.

+0

입력 해 주셔서 감사합니다. 이전에이 방법을 사용했지만 100 % 확신하지 못했습니다. 호기심 때문에 라우팅으로 처리 할 수 ​​있을지 궁금해졌습니다. 나는 아직 그것을 결정하지 못했지만, Grofits의 대답은 내가 찾고있는 것에 더 많은 것이었다. –

+0

기록을 위해, 이것은 컨벤션 기반 라우팅 (한 곳에서)으로도 가능해야하므로 'IHttpRoute' 또는'HttpRoute'를 하위 클래스로 사용하여 모든 컨트롤러에 속성을 추가 할 필요가 없습니다. 들어오는 URL의 컨트롤러 경로 값을 변경하여 "Api"파트를 추가하고 나가는 URL AFAIK를 생성하기 전에 라우트 값에서 "Api"를 제거하면됩니다. – NightOwl888