Múltiples recursos de iHTTPAction se obtienen dentro de un solo apicontroller falla
-
21-12-2019 - |
Pregunta
Estoy jugando con WEBAPI2 y encontramos un problema extraño.
He actualizado el controlador de valor predeterminado para usar ihttpActionResult
como
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" });
}
Cuando intento llamar a la llamada () dentro de Postman, recibo un error
{ "Mensaje": "Se ha producido un error". "ExceptionMessage": "Se encontraron medidas múltiples que coinciden con la solicitud: \ r \ nsystem.web.http.ihttpActionResult Obten () en el tipo WebApplication1.controllers.valuescontroller \ r \ nstem.web.http.ihttpActionResult Get2 () ON SOBRE TIPO WEBPLICION1 .Controllers.ValuesController ", "EXCEIPTYPE": "SYSTEM.INVALIDOPERREEXCEY", "StackTrace": "en System.Web.http.controllers.apicontrolleractionselector.actionselectorcacheitem.selectaction (httpcontrollercontext controleContext) \ r \nen System.Web.http.controllers.apicontrolleractionsElector.selectaction (HttpControllercontext ControllerContext) \ R \ N en el sistema. Web.http.apicontroller.executeasync (httpcontrollercontext controleContext, cancellationToken CancellationToken en System.Web.http.dispatcher.httpcontrollerdispatcher.sendasynccore (Solicitud de HTTPRequestMessage, CancelationToken CancellationToken) \ R \ N en System.Web.http.dispatcher. Httpcontrollerdispatcher.d__0.movenext () " }
¿Necesito crear manualmente una ruta para cada una para que esto funcione?
¡algo tan simple, pero me causa un dolor de cabeza!
Solución
Es porque tiene dos solicitudes que no toman parámetros, por lo que WebAPI no tiene forma de diferenciar entre los dos.Una forma sería establecer diferentes rutas para cada método como usted dice.Sin embargo, la forma más fácil de evitarlo es usar la enrutamiento de atributos biblioteca que le permite definir diferentes rutas en el controlador yLos niveles de acción realmente simplemente así:
[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" });
}
}