¿Cómo puedo admitir rutas GET tanto para GUID como para enteros? Me doy cuenta de que los GUID no son ideales, pero es lo que es por ahora. Quiero agregar soporte para números enteros para que sea más fácil para los usuarios recordar y comunicar lo que deberían ser "claves" únicas.
Rutas de ejemplo:
testcases/9D9A691A-AE95-45A4-A423-08DD1A69D0D1 testcases/1234 Mi WebApiConfig :
public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); var routes = config.Routes; routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}"); routes.MapHttpRoute("DefaultApiWithKey", "Api/{controller}/{key}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get), key = @"^\d+$" }); routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }); routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }); routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new { action = "Post" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Post) }); }Mi controlador (solo firmas de métodos):
[RoutePrefix("Api/TestCases")] public class TestCasesController : PlanControllerBase { [Route("")] public OperationResult<IEnumerable<TestCaseDTO>> Get([FromUri] TestCaseRequest request) [Route("{id}")] [HttpGet] public OperationResult<TestCaseDTO> Get(Guid id) [Route("{key}")] [HttpGet] public OperationResult<TestCaseDTO> Get(int key) ... }Recibo un error interno del servidor cuando intento llamar al recurso usando el número entero. ¡Cualquier ayuda es apreciada!
¡Gracias a @SirwanAfifi! Me encontré con el artículo Enrutamiento de atributos en ASP.NET al que se hace referencia en la pregunta SO que mencionó, pero aparentemente no vi la necesidad de restricciones de atributos de ruta en ese momento.
Para mí, fue usar [Route("{id:guid}")] y [Route("{key:int}")] en los métodos de mi controlador lo que hizo el truco. También comenté las rutas Http relacionadas con {id} y {key} en mi WebApiConfig para verificar que los atributos en el controlador sean responsables de realizar el enrutamiento.