多个IHttpActionResults单个ApiController中的GET失败

时间:2014-01-09 02:12:44

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

我正在玩WebApi2并遇到了一个奇怪的问题。

我已更新默认的ValuesController以使用IHttpActionResult

    public class ValuesController : ApiController
{
    // GET api/values
    [HttpGet]
    public IHttpActionResult Get()
    {
        return Ok(new string[] { "value1", "value2" });
    }

    // GET api/values/get2
    [HttpGet]
    public IHttpActionResult Get2()
    {
        return Ok(new string[] { "value1", "value2" });
    }

当我尝试在邮递员中调用Get()时出现错误

  

{       “消息”:“发生错误。”,       “ExceptionMessage”:“找到了与请求匹配的多个操作:\ r \ nSystem.Web.Http.IHttpActionResult Get()类型为WebApplication1.Controllers.ValuesController \ r \ nSystem.Web.Http.IHttpActionResult类型为WebApplication1的Get2() .Controllers.ValuesController”       “ExceptionType”:“System.InvalidOperationException”,       “StackTrace”:“在System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\ r \ n,在System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\ r \ n在System。 Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext,CancellationToken cancellationToken)\ r \ n在System.Web.Http.Dispatcher上的System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage请求,CancellationToken cancellationToken)\ r \ n。 HttpControllerDispatcher.d__0.MoveNext()”   }

我是否需要为每个人手动创建路线才能使其正常工作?

这么简单,但令我头痛!

1 个答案:

答案 0 :(得分:1)

这是因为你有两个没有参数的GET请求,所以WebApi无法区分这两个参数。一种方法是为每种方法设置不同的路线。解决这个问题的最简单方法是使用Attribute Routing库,它允许您在Controller和Action级别定义不同的路径,就像这样:

[RoutePrefix("api/values")]
public class ValuesController : ApiController
{   
    [GET("Get")]
    public IHttpActionResult Get()
    {
        return Ok(new string[] { "value1", "value2" });
    }

    [GET("Get2")]
    public IHttpActionResult Get2()
    {
        return Ok(new string[] { "value1", "value2" });
    }
}