ASP.net Web API 2自定义方法

时间:2014-03-05 16:42:05

标签: asp.net asp.net-web-api asp.net-routing

我已将此方法添加到我的web api控制器:

    [HttpPost]
    public bool CreateTrening(int routineId)
    {
        try
        {
            var userId = User.Identity.GetUserId();
            TreningService.CheckIfLastTrenigWasCompleted(userId);
            TreningService.CreateTreningForUser(userId, routineId);
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }

我已经为我的WebApiConfig文件添加了另一条路径,所以它现在看起来像这样:

       config.MapHttpAttributeRoutes();

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

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

但是当我试着打电话给我的方法时:

/ EditWorkout / CreateTrening / 1

我收到此错误:

{“消息”:“未找到与请求URI匹配的HTTP资源'/EditWorkout/CreateTrening/1'.","MessageDetail":"在与请求匹配的控制器'EditWorkout'上找不到任何操作。 “}

如何调用WebApi控制器中的方法?

1 个答案:

答案 0 :(得分:1)

使用该URL调用post方法将不起作用,因为帖子需要在Http Message正文中传输的值。不在URL中,因此你的控制器没有找到方法。

对此最好的解决方案可能是在发送控制器的http消息中对发布的值进行编码,并使用/ EditWorkout / CreateTrening调用URL,这将作为帖子。

这是另一个SO线程,其中回答了如何执行此操作的问题, Specific post question answered