我有一个带有两种 POST 方法的控制器:
[WebInvoke(Method = "POST", UriTemplate = "/api/controller/action1")]
[ActionName("action1")]
public HttpResponseMessage MethodA(string s1, string s2);
[WebInvoke(Method = "POST", UriTemplate = "/api/controller/action2")]
[ActionName("action2")]
public HttpResponseMessage MethodB(string s1, InternalClass c);
我从测试工具中调用它。当我尝试POST
使用MethodB
URLhttp://localhost/api/controller?s1=<string>
并传入c
POST 正文时,该消息表明它正在尝试调用 MethodA(我有一个验证过滤器,指示“s1 和 s2 是必填字段”)。
POST
当我将操作添加到URL 并尝试MethodB
使用http://localhost/api/controller/action2?s1=<string>
,传入c
正文时,我得到了 404。
我修改了我RouteConfig
的使用这些路线:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "Name1",
routeTemplate: "api/{controller}"
);
routes.MapHttpRoute(
name: "Name2",
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // Only integers
);
routes.MapHttpRoute(
name: "Name3",
routeTemplate: "api/{controller}/{action}"
);
routes.MapRoute(
name: "Default",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Default", action = "Index", id = UrlParameter.Optional }
);
正如这个问题所示。
我究竟做错了什么?