route query net mvc multiple attribute asp asp.net rest controller action naming-conventions

asp.net - net - web api query string parameters



Acciones de controlador de WebApi nombrando la convención (2)

Si desea que Web Api busque el nombre de la acción al enrutar, cambie la clase WebApiConfig.cs en la carpeta App_Start a continuación:

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

Entonces solo puedes hacer una solicitud GET para

http://mysite/api/customer/GetCustomerById/1

También te recomiendo que estudies el artículo a continuación para una comprensión más profunda:

Enrutamiento por nombre de acción

Como dice la convención de nomenclatura, el nombre de las acciones del controlador de WebApi debe ser Get (), Put (). Publicar () etc. Pero dime si tengo un controlador como CustomerController , ahora quiero tener dos acciones dentro de él. Uno es GetCustomerById (int id) y otro es GetCustomerByAge (int edad) . Aquí ambas acciones aceptan un parámetro como int.

Entonces, si quiero que la URL sea amigable como "api / customer /" también quiero seguir la convención de nomenclatura de acciones como solo Get (int id) / get (int age) , ¿cómo lo haré?


Una forma alternativa es el atributo de métodos HTTP.

En lugar de utilizar la convención de nomenclatura para los métodos HTTP, puede especificar explícitamente el método HTTP para una acción decorando el método de acción con el atributo HttpGet, HttpPut, HttpPost o HttpDelete.

En el siguiente ejemplo, el método FindProduct se asigna a las solicitudes GET:

public class ProductsController : ApiController { [HttpGet] public Product FindProduct(id) {} }

Para permitir múltiples métodos HTTP para una acción, o para permitir métodos HTTP que no sean GET, PUT, POST y DELETE, use el atributo AcceptVerbs, que toma una lista de métodos HTTP.

public class ProductsController : ApiController { [AcceptVerbs("GET", "HEAD")] public Product FindProduct(id) { } }