3

私は少し混乱しています。次のメソッドを持つコントローラー(ApiControllerから派生)があります。

[ActionName("getusername")]
public string GetUserName(string name)
{
    return "TestUser";
}

私のルーティングは次のように設定されています:

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

/api/mycontroller/getusername/testフィドラーでGETをヒットしようとすると、400エラーが発生し続けました。

[FromBody]GetUserNameのnameパラメーターに追加すると、すべてが機能することがわかりました。

私はどういうわけか、それ[FromBody]がに使用されていると考えてHttpPostいました。パラメータが投稿の本文にあり、したがって、には必要ないことを示していますGET。私は間違っていたようですが。

これはどのように作動しますか?

4

2 に答える 2

6

ルーティングを次のように変更する必要があります。

config.Routes.MapHttpRoute(
    name: "ActionApi",
    routeTemplate: "api/{controller}/{action}/{name}",
    defaults: new { name = RouteParameter.Optional }
);

または、パラメータの名前を次のように変更します。

[ActionName("getusername")]
public string GetUserName(string id)
{
    return "TestUser";
}

注:追加のルーティングパラメーターは、メソッドパラメーター名と一致する必要があります。

于 2013-02-06T23:05:41.997 に答える
1

探していたものに近い場合は、次のこともできます。

// GET api/user?name=test
public string Get(string name)
{
    return "TestUser";
}

ApiControllerこれは、名前付きを使用していることを前提としており、パラメータをクエリ文字列としてUserController渡すことができます。nameこのように、指定する必要はありませんがActionMethod、HTTP動詞と一致するルートに依存します。

于 2013-02-07T19:17:18.900 に答える