我正在玩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()” }
我是否需要为每个人手动创建路线才能使其正常工作?
这么简单,但令我头痛!
答案 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" });
}
}