Web API路由以支持GUID和整数ID

如何支持GUID和整数的GET路由? 我意识到GUID并不理想,但它现在就是它。 我想添加对整数的支持,以便用户更容易记住和传达应该是唯一的“密钥”。

示例路线:

 testcases/9D9A691A-AE95-45A4-A423-08DD1A69D0D1 testcases/1234 

我的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) }); } 

我的控制器(仅限方法签名):

 [RoutePrefix("Api/TestCases")] public class TestCasesController : PlanControllerBase { [Route("")] public OperationResult<IEnumerable> Get([FromUri] TestCaseRequest request) [Route("{id}")] [HttpGet] public OperationResult Get(Guid id) [Route("{key}")] [HttpGet] public OperationResult Get(int key) ... } 

当我尝试使用整数调用资源时,我收到内部服务器错误 。 任何帮助表示赞赏!

谢谢@SirwanAfifi! 我在你提到的SO问题中提到了ASP.NET中的属性路由 ,但显然我当时没有看到路由属性约束的需要。

对我来说,它是在我的控制器方法上使用[Route("{id:guid}")][Route("{key:int}")] 。 我还在WebApiConfig注释了与{id}{key}相关的Http路由,以validation控制器中的属性是否负责路由。