路由配置中的多个操作,没有任何帮助

时间:2015-02-10 18:53:32

标签: asp.net-mvc asp.net-mvc-4 asp.net-web-api asp.net-web-api2

我有一个名为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找到了匹配的多个动作......

2 个答案:

答案 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();

我希望它有所帮助。