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!

¿Fue útil?

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" });
    }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top