0

継承せずに新しい MS Web API を使用したいApiController

理想的には、HTTP メソッドとルートを 1 つだけ処理する個別のクラスを作成したいと考えています。例えば:

// 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このアプローチを可能にする拡張ポイントがたくさんあると思いますが、適切なドキュメントが見つかりません。誰かが私を正しい方向に向けることができますか?

4

1 に答える 1

0

これは、意図した使用方法ではありませんApiController

これを行う必要がある場合は、通常のルーティング/アクション選択の上に構築することをお勧めします。そのような実装のために他のクラスを呼び出すコントローラーを持つことができるということです。関数型アプローチを使用したそのようなプロトタイプの 1 つを以下に示します。

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

デリゲートは単なるデリゲートまたはインターフェイスの実装である可能性がありますが、「単一のメソッドとのインターフェイスはデリゲートである」ため、デリゲートを好みます。

于 2012-07-18T10:37:52.067 に答える