64

エラーが発生しました - 要求に一致するアクションがコントローラーの「アクション」に見つかりませんでした。

URLはhttp://localhost:37331/api/action/FindByModule/1.

私が使ったルーティングは

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

コントローラ:

public class ActionController : ApiController
{
    private IActionRepository repository = null;

    [HttpGet]
    [ActionName("All")]
    public IEnumerable<JsonAction> All()
    {
        return from action in this.repository.Get()
               select new JsonAction
               {
                   ID = action.ID,
                   Text = action.Text.Trim(),
                   Description = action.Description.Trim(),
               };
    }

    [HttpGet]
    [ActionName("FindByModule")]
    public IEnumerable<JsonAction> FindByModule(Int64 moduleId)
    {
        return from action in this.repository.FindByModule(moduleId)
               select new JsonAction
               {
                   ID = action.ID,
                   Text = action.Text.Trim(),
                   Description = action.Description.Trim(),
               };
    }
}
4

2 に答える 2

129

これは、パラメーター名の不一致があるためです。ルートから値1がパラメーター named に割り当てられid、アクションはパラメーター named を探しますmoduleId

最初のオプションは、次のようにルートを変更することです。

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

2 つ目は、URL を次のように変更することです。

http://localhost:37331/api/action/FindByModule?moduleId=1

したがって、パラメーター名は一致します。

于 2013-01-23T14:50:01.450 に答える