我想使用新的MS 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 :(得分: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)
{
}
}
代表可以只是委托或接口的实现,虽然我更喜欢委托,因为“单一方法的接口是委托”。