支持 GUID 和整数 ID 的 Web API 路由
Posted
技术标签:
【中文标题】支持 GUID 和整数 ID 的 Web API 路由【英文标题】:Web API Routes to support both GUID and integer IDs 【发布时间】:2015-10-13 04:36:14 【问题描述】:如何支持GET
GUID 和整数路由?我意识到 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<TestCaseDTO>> Get([FromUri] TestCaseRequest request)
[Route("id")]
[HttpGet]
public OperationResult<TestCaseDTO> Get(Guid id)
[Route("key")]
[HttpGet]
public OperationResult<TestCaseDTO> Get(int key)
...
当我尝试使用整数调用资源时,出现内部服务器错误。任何帮助表示赞赏!
【问题讨论】:
接受字符串的单一路由,并进行一些检查? 看看这个答案:***.com/questions/14353466/… 【参考方案1】:感谢@SirwanAfifi!我遇到了您提到的 SO 问题中提到的Attribute Routing in ASP.NET 文章,但显然我当时没有看到路由属性约束的必要性。
对我来说,在我的控制器方法上使用 [Route("id:guid")]
和 [Route("key:int")]
就可以了。我还在我的WebApiConfig
中注释掉了与id
和key
相关的Http 路由,以验证控制器中的属性是否负责执行路由。
【讨论】:
以上是关于支持 GUID 和整数 ID 的 Web API 路由的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Keycloak 获取用户 ID 和用户 UUID/GUID?
Azure API Gateway - 支持 OpenAPI 格式属性