Web API路由支持GUID和整数ID

gop*_*err 20 c# asp.net-web-api asp.net-web-api-routing

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

示例路线:

testcases/9D9A691A-AE95-45A4-A423-08DD1A69D0D1   
testcases/1234
Run Code Online (Sandbox Code Playgroud)

我的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) });
}
Run Code Online (Sandbox Code Playgroud)

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

[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)

    ...
}
Run Code Online (Sandbox Code Playgroud)

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

gop*_*err 23

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

对我来说,它是使用[Route("{id:guid}")][Route("{key:int}")]我的控制器方法完成的伎俩.我也注释掉相关的Http路线{id},并{key}在我的WebApiConfig验证控制器的属性是负责做路由.