新しい MVC WebApi プロジェクトをビルドしているときに、投稿アクションが正しく機能していないように見える問題に遭遇しました。
次のアクションがあります。
//--
//-- POST: /api/groups/subscribe/1/groups
[HttpPost]
public GroupResponse Subscribe(int id, List<int> groups )
{
var response = new GroupResponse();
var manager = new UserManagement();
try
{
response.Status = 1;
var subscribedGroups = manager.GetSubscribedGroups(id).Select(g => g.GroupId).ToList();
foreach (var subscribedGroup in subscribedGroups.Where(groups.Contains))
{
groups.Remove(subscribedGroup);
}
//-- group is a reserved word @ escapes this and treats it as a regular variable
foreach (var @group in groups.Where(g => !manager.JoinGroup(id, g)))
{
response.Status = 2;
response.ErrorMessage = Constants.SUBSCRIBE_FAIL;
}
}
catch (Exception)
{
response.Status = 2;
response.ErrorMessage = Constants.SUBSCRIBE_FAIL;
return response;
}
return response;
}
レスト キットからこのアクションを使用しようとすると、次のエラー メッセージが表示されます。
{
"Message":"No HTTP resource was found that matches the request URI 'http://localhost:50393/api/groups/subscribe'.",
"MessageDetail":"No action was found on the controller 'Groups' that matches the request."
}
フィドラーを介してアクションを実行しようとしましたが、API に送信されているデータを API が無視しているようで、現時点では混乱しています。
/api/groups/subscribe?id=1 のように API を使用しようとすると、API アクションが実行されますが、必要なリストを渡すことができません。
これを試して処理するためのルートも設定しましたが、まったく役に立たないようです:
config.Routes.MapHttpRoute(
"subscribe",
"api/groups/subscribe/{id}/{groups}",
new { controller = "Groups", action = "Subscribe", id = RouteParameter.Optional, groups = RouteParameter.Optional
});
追加情報: フィドラーでテストするとき、次のように自分のリクエストを作成しています:
リクエスト ヘッダー: ユーザー エージェント: Fiddler ホスト: localhost:50393 コンテンツの長さ: 29 コンテンツ タイプ: アプリケーション/json; 文字セット=utf-8
リクエスト本文: {"id":1,"groups":[1,2,3,4,5]}