2014-04-11 2 views
5

웹 API v2를 사용하고 있으며 CRUD 작업을 수행하는 데 필요한 몇 가지 모델이 있습니다. 예를 들어 Allergy 모델과 Prescription 모델이 있습니다. 애플리케이션 자체에서 적절한 모델로 바뀔 수있는 뷰 모델을 가지고 있지만 간단하게하기 위해 웹 API 컨트롤러에서 모델을 바로 사용한다고 가정 해 보겠습니다.일반 웹 API 컨트롤러

그래서 이런 식으로 뭔가 :

public class PrescriptionsController 
    { 
     public HttpResponseMessage Put(Prescription model) 
     { 
       // saved to the DB 
     } 

     ... (other CRUD operations) 
    } 

나는 또한 가지고있는 Allergy 모델 같은 :

public class AllergiesController 
    { 
     public HttpResponseMessage Put(Allergy model) 
     { 
       // saved to the DB 
     } 

     ... (other CRUD operations) 
    } 

두 모델은 서로 다른 특성을 가지고 있지만 정확히 같은 방식으로 처리됩니다 - 내가 가지고있는 사실을 각 CRUD 작업에 대해 정확히 같은 방식으로 처리되는 약 3 개의 다른 모델. 기본적으로 복사되고 붙여 넣어 진 코드 인 5 개의 다른 종점이 있습니다.

내가 일반적인 컨트롤러는 이러한 모델을 모두 처리 할 수 ​​있도록 수 :

그래서 제 질문은 이것이다? MyCommonController<T>과 같은 것? (물론 더 나은 이름을!) 웹 API는 그 시나리오에서 라우팅을 처리 할 수 ​​있습니까? 그것도 좋은 생각입니까?

+0

다른 방법으로 이것을 구현할 수 있다고 생각합니다. 라우팅으로. 나는 시도하지 않았지만 보게 될 것이다. – Guanxi

+0

가능합니다. 여기에 대한 토론이 있습니다. http://stackoverflow.com/questions/12077361/generic-webapi-controller – Trisk

답변

7

결국 일반 컨트롤러를 시도하지 않았습니다. 라우팅으로 일부 농구를 뛰어 넘는 것이 가능할 것으로 보입니다.

그러나이 작업을 수행하기위한 라우팅 수정이 너무 복잡하기 때문에 내가 얻을 수있는 이점이 무효화되었습니다. 나는 물건을 간단하게하고 싶었다.

class MyBaseController<TModel> : ApiController 
{ 
    public TModel Get(int id) { ... } 
} 

을하고 그것에서 각 유형의 상속했다 : 그래서 난 그냥 대신 일반적인 기본 클래스를 생성

class PrescriptionsController : MyBaseController<Prescription> { } 

을 그리고 그 라우팅 또는 아무것도 엉망이 없었 마법처럼 일했다. 그것은 무엇이 일어나고 있고 꽤 유지할 수 있는지 분명하게합니다.

관련 문제