Domanda

Ho due metodi come questo

public class ProductController : ApiController
{
    public Product GetProductById(int id)
    {
        var product = ... //get product
        return product;
    }

    public Product GetProduct(int id)
    {
        var product = ... //get product
        return product;
    }
}

Quando chiamo url: GET http: // localhost / api / prodotto / 1 . Voglio che il primo metodo viene richiamato, non il secondo metodo.
Come posso fare questo?

È stato utile?

Soluzione

È necessario URI unici. È possibile modificare il percorso per arrivare a questo:

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

);

Ora è possibile accedere alla API in questo modo:

http: // localhost / api / prodotto / GetProductById / 1

http: // localhost / api / prodotto / EsprProdotto / 1

ho scritto un po ' introduzione ad ASP.NET Web API che mostra alcune delle differenze a WCF Web API.

È inoltre possibile aggiungere un'azione predefinita, ad esempio, l'uno gli elenchi di tutti i prodotti in modo da poter fare qualcosa di simile:

http://localhost/api/product/  // returns the list without specifying the method

e l'altro viene richiamato in questo modo

http://localhost/api/product/byid/1  // returns the list without specifying the method

quello che faccio è avere un ProductsController e ProductController. ProductsController è responsabile delle operazioni su collezioni di T (ottenere tutto) e ProductController è responsabile per le operazioni su T (come avere uno specifico).

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