4

だから、これは本当に私を頭痛の種にしています。

ルート:

            config.routes.MapHttpRoute(
            name: 'ControllerAction' ,
            routeTemplate: "api/{controller}/{action}"
        );

コントローラ:

public class LookupsController : ApiControllerBase
{
    [ActionName("all")]
    public Lookups GetLookups()
    {
        var lookups = new Lookups
        {
            Customers = GetCustomers().ToList(),
            //add more
        };
        return lookups;
    }

}

しかし、uri: /api/lookups/all にアクセスしようとすると、次のような 404 エラーが表示されます。

「名前「all」に一致するコントローラー「ルックアップ」でアクションが見つかりませんでした。」

どんな助けでもいただければ幸いです

編集:だから私は最終的にそれを理解しました。それは間違った依存関係が原因でした。VS2012 はアクションを system.web.mvc.actionnameattribute に自動解決しましたが、必要なのは system.web.http.actionnameattribute でした。

とにかく奇妙な問題ですが、これが他の誰かに役立つことを願っています。

4

1 に答える 1

1

ヤコブ・リー

編集:

コントローラーの名前を変更していますが、メソッドを指定していません。WebApi は、プレフィックス GET、PUT、DELETE、POST からメソッドを解決します。したがって、メソッド属性はアクションの署名に配置する必要があります。

これを試してください、私にとってはうまくいきます:

public class LookupsController : ApiControllerBase
{
    [HttpGet()]
    [ActionName("All")]
    public Lookups GetLookups()
    {
        var lookups = new Lookups
        {
            Customers = GetCustomers().ToList(),
            //add more
        };
        return lookups;
    }

}

routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }

);

ルーティングの詳細については、こちらをご覧ください。

ASP.NET Web API でのルーティング

その助けを願っています!

于 2013-04-30T13:12:04.993 に答える