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控制器中的属性是否负责路由。