Domanda

Sto giocando con Webapi2 e mi sono imbattuto in un problema strano.

Ho aggiornato il ValueScontroller predefinito per utilizzare IHTTPACTIONResult

come

    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 provo Call Get () all'interno del postino ottengo un errore

.

{ "Messaggio": "Si è verificato un errore.", "ExceptMessage": "Sono state trovate più azioni che corrispondono alla richiesta: \ r \ nSystem.web.http.httpactionResult Get () on Type Webapplication1.Controllers.Valuescontroller \ r \ nsystem.web.http.ihttpactionResult Get2 () on Type WebApplication1 .Controllers.Valuescontroller ", "EccezioneType": "system.invalidoperationexception", "Stacktrace": "A System.Web.HTTP.Controllers.apicontrollerationActionelector.actionSelectorCacheItem.Selection (httpControllerConText ControllequentText) \ R \ N su System.Web.http.controllers.apicontrollerationActionelector.selection (httpControllerContExt ControllerContext) \ R \ N al sistema. Web.http.apicontroller.ecuteasync (httpControllerContext ControllerConText, CancellationToken CancellationToken) \ R \ N su System.Web.http.dispatcher.httpControllerDispatcher.SendasynCcore (richiesta HTTPRequestMessage, CancellationToken CancellationToken) \ R \ N su System.Web.http.dispatcher. Httpcontrollerdispatcher.d__0.dovext () " }

Devo creare manualmente un percorso per ognuno per far funzionare questo?

Qualcosa di così semplice, ancora causandomi un mal di testa!

È stato utile?

Soluzione

È perché hai due richieste di ricezione che non prendono parametri, quindi Webapi non ha modo di differenziare tra i due.Un modo sarebbe quello di impostare diversi percorsi per ogni metodo come dici tu.Il modo più semplice per aggirare questo è quello di usare il instradamento degli attributi libreria che consente di definire percorsi diversi sul controller eI livelli di azione sono semplicemente semplicemente così:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top