多个ihttpactionresults get在一个apicontroller中失败
-
21-12-2019 - |
题
我正在玩webapi2,遇到一个奇怪的问题。
我已更新默认的valeScontroller以使用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 get2()上类型webapplication1 .controllers.valuescontroller“, “Exceptiontype”:“system.invalidoperationException”, “stacktrace”:“在system.web.http.controllers.apicontrollerInceSelector.asticeLectorCacheItem.Selectaction(HTTPControllerContext ControllerContext)\ r \ n在system.web.http.controlers.apicontrolleripnerelector.selectaction(httpControllerContext ControllerContext)\ r \ n在系统。 web.http.apicontroller.executeasync(httpcontrollercontext controllercontext,cancellationtoken cunclationToken)\ r \ n在system.web.http.dispatcher.httpcontrollerdispatcher.sendasynccore(httprokeestmessage请求,cancellationToken cancellationToken)\ r \ n在system.web.http.dispatcher。 httpcontrollerdispatcher.d__0.movenext()“ }
我是否需要手动创建一条路线,以便每个都可以工作?
一些如此简单,但导致我头疼!
解决方案
是因为你有两个get请求,没有参数,所以webapi无法区分两者。如您所说,一种方式是为每种方法设置不同的路由。解决此问题的最简单方法是使用属性路由库,它允许您在控制器处定义不同的路由行动水平真的就像这样:
[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" });
}
}
.