我已将此方法添加到我的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控制器中的方法?
答案 0 :(得分:1)
使用该URL调用post方法将不起作用,因为帖子需要在Http Message正文中传输的值。不在URL中,因此你的控制器没有找到方法。
对此最好的解决方案可能是在发送控制器的http消息中对发布的值进行编码,并使用/ EditWorkout / CreateTrening调用URL,这将作为帖子。
这是另一个SO线程,其中回答了如何执行此操作的问题, Specific post question answered