2012-07-18 33 views
0

我想使用新的MS的Web API,而不必從ApiController的Web API,而無需使用ApiController

繼承理想我想創建單獨的類是隻處理一個HTTP方法和途徑。例如:

// Handles GET /customer/1 
public class GetCustomerHandler 
{ 
    public object Handle(int id) 
    { 
     return ...; 
    } 
} 

// Handles PUT /customer/1 
public class PutCustomerHandler 
{ 
    public object Handle(NewCustomerForm form) 
    { 
     return ...; 
    } 
} 

我想象System.Web.Http有大量的擴展點,允許這種做法,但是我無法找到相應的文檔。請有人指點我正確的方向嗎?

+0

這不是使用ApiController的預期方法。有沒有特別的理由來做到這一點?你總是可以在你的主控制器中調用其他類,這樣可以工作嗎?# – Aliostad 2012-07-18 09:22:20

+0

我正在嘗試使用更嚴格的SRP方法來處理我的代碼。處理獲取數據的代碼與更新數據的代碼完全不同,所以我不明白他們爲什麼應該在同一個類中。 – 2012-07-18 09:37:27

回答

0

這不是預期的使用方法ApiController

我建議,如果你需要這樣做,你建立它在正常路由/動作選擇的頂部。我的意思是你可以有一個控制器來調用其他類的實現。使用功能的做法可能是下面這樣一個原型:雖然我喜歡代表,因爲「用單一的方法接口是一個代表」

public abstract class HubController<T> 
{ 

    private Func<int, object> _getHandler; 
    private Func<T, object> _putHandler; 

    public HubController(Func<int, object> getHandler, Func<T, object> putHandler 
     // ... delete and post handlers too 
     ) 
    { 
     _putHandler = putHandler; 
     _getHandler = getHandler; 
    } 

    public object Get(int id) 
    { 
     return _getHandler(id); 
    } 

    public object Put(T t) 
    { 
     return _putHandler(t); 
    } 

    // ... also Post and Delete 
} 

public class CustomerControler : HubController<Customer> 
{ 
    public CustomerControler(Func<int, object> getHandler, Func<Customer, object> putHandler) : base(getHandler, putHandler) 
    { 
    } 
} 

代表們可能只是代表或執行的接口。

相關問題