2014-11-17 20 views
5

voglio implementare più Get metodi, per Es:Posso avere più Get Methods in ASP.Net controller Web API

Get (int id, l'utente userobj) e Get (int storeId, l'utente userobj

E 'possibile implementare in questo modo, non voglio cambiare il nome del metodo di azione come in quel caso ho bisogno di digitare il nome dell'azione in URL.

Sto pensando di colpire i metodi di azione attraverso questo formato campione '// localhost: 2342/' che non contiene l'azione nome del metodo.

+2

Dimentica che sono metodi di azione per un secondo. Non puoi avere quei due metodi in una classe, periodo. Hanno le stesse firme –

+0

vedere questo - http://stackoverflow.com/questions/15620142/web-api-multiple-get-with-same-signature-routing – Ivan

risposta

6

Fondamentalmente non è possibile farlo, e il motivo è che entrambi i metodi hanno lo stesso nome e la stessa firma (stesso numero di parametro e tipi) e questo non verrà compilato con C#, perché C# non lo consente.

Ora, con Web API, se si dispone di due metodi con la stessa azione come il proprio esempio (entrambi GET) e con la stessa firma (int, Utente), quando si tenta di colpirli uno dal lato client (come da Javascript) l'ASp.NET proverà a far corrispondere il tipo di parametri passati ai metodi (azioni) e poiché entrambi hanno la firma esatta fallirà e genererà un'eccezione sull'ambiguità.

Quindi, si aggiunge l'attributo ActionName ai propri metodi per distinguerli, oppure si utilizza l'attributo Route e si assegnano i metodi a percorsi diversi.

Spero che questo aiuti.

+0

Grazie per i suggerimenti .... –

+0

gentilmente vedere il mio [ domanda] (https://stackoverflow.com/questions/46680893/passing-multiple-parameters-to-web-api-get-method) – faisal1208

3

è necessario aggiungere azione nome al modello percorso implementare più metodi GET in ASP.Net Web regolatore API.

WebApiConfig:

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new {id = RouteParameter.Optional } 
); 

Controller:

public class TestController : ApiController 
{ 
    public DataSet GetStudentDetails(int iStudID) 
    { 

    } 

    [HttpGet] 
    public DataSet TeacherDetails(int iTeachID) 
    { 

    } 
} 

Nota: Il/nome del metodo azione deve startwith 'Get', orelse è necessario specificare [ HttpGet] sopra l'azione/metodo

+0

Perché si mostra la configurazione di instradamento predefinita come soluzione? – Elisabeth

+3

Votazione negativa. La configurazione di instradamento WebAPI predefinita non ha parametri di azione per impostazione predefinita, solo "api/{controller}/{id}". L'aggiunta di {action} consente effettivamente più metodi GET, che è ciò che l'OP voleva. –

Problemi correlati