我有一个名为Users的ApiController 默认情况下,我有Post。 它工作正常。
但是,我决定添加一个也适用于Post方法的附加操作,现在我有以下代码:
[HttpPost]
public HttpResponseMessage Post(dynamic data){}
[HttpPost]
public HttpRequestMessage LogOff([FromBody]dynamic data){}
我还修改了路由,尝试了每个评论这里的选项: //config.Routes.MapHttpRoute( //名称:“UserApi”, // routeTemplate:“api / Users / LogOff / {data} / {id}”, //默认值:new {id = RouteParameter.Optional} //);
//config.Routes.MapHttpRoute(
// name: "userapi",
// routeTemplate: "api/{controller}/{action}"
//);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
我也玩过切换他们的订单位置并且没有结果,它总是说:web api找到了匹配的多个动作......
答案 0 :(得分:0)
在我看来,问题是:无法混合Noname操作(如标准Post)和命名Post Actions。 作为一个例子,我创建了两个命名的动作,它们都在Post上运行并且它们工作正常,但原始Post停止工作...... 这很奇怪,因为路由是正确的,我有两种选择:有和没有{action}
答案 1 :(得分:0)
在下一个链接(http://www.codeproject.com/Articles/624180/Routing-Basics-in-ASP-NET-Web-API)中,您可以解释为什么这不起作用。我将向您展示解释您的代码无法正常工作的部分:
与熟悉的MVC路由模板不同,Web API模板不是 指定{action}路由参数。这是因为,正如我们提到的那样 之前,Web API框架将默认映射传入请求 根据请求的HTTP动词进行适当的操作。
因此,您不能使用相同参数的相同动词(在本例中为POST)使用两种方法。
如果要实现它,可以使用属性路由。下一个代码就是一个例子:
[RoutePrefix("users")]
public class UsersController : ApiController
{
[HttpPost]
[Route("post")]
public HttpResponseMessage Post(dynamic data){}
[HttpPost]
[Route("logoff")]
public HttpRequestMessage LogOff([FromBody]dynamic data){}
}
如果您打算使用此解决方案,则必须在WebApiConfig中添加此行代码。
config.Routes.MapHttpAttributeRoutes();
我希望它有所帮助。