Web API不使用ApiController

时间:2012-07-18 09:19:28

标签: asp.net asp.net-web-api wcf-web-api

我想使用新的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有很多扩展点可以允许这种方法,但我找不到合适的文档。有人能指出我正确的方向吗?

1 个答案:

答案 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)
    {
    }
}

代表可以只是委托或接口的实现,虽然我更喜欢委托,因为“单一方法的接口是委托”