Pergunta

Eu estou jogando com WebApi2 e me deparei com um estranho problema.

Eu tenho atualizado o padrão ValuesController 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" });
    }

Quando eu tento chamar Get() dentro de carteiro I get um erro

{ "Mensagem":"Um erro ocorreu.", "ExceptionMessage":"Várias ações foram encontradas que correspondem ao seu pedido: System.Da Web.Http.IHttpActionResult Get (), no tipo de WebApplication1.Controladores.ValuesController System.Da Web.Http.IHttpActionResult Get2() no tipo de WebApplication1.Controladores.ValuesController", "Tipo de exceção":"O sistema.InvalidOperationException", "StackTrace":"no Sistema.Da Web.Http.Controladores.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext) no Sistema.Da Web.Http.Controladores.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext) no Sistema.Da Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) no Sistema.Da Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncCore(HttpRequestMessage pedido, CancellationToken cancellationToken) no Sistema.Da Web.Http.Dispatcher.HttpControllerDispatcher.d__0.MoveNext()" }

Eu preciso criar manualmente uma rota para cada uma para chegar a este trabalho?

Algo tão simples, mas me causando uma dor de cabeça!

Foi útil?

Solução

É porque você tem dois pedidos GET que demorar parâmetros de modo a WebApi não tem nenhuma forma de diferenciar entre os dois.Uma forma seria a criação de rotas diferentes para cada método, como você diz.A maneira mais fácil de contornar isto, porém, é usar o Atributo De Roteamento biblioteca que permite a você definir rotas diferentes no Controlador e níveis de Ação muito simples, como esta:

[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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top