【问题标题】:Web API Routes to support both GUID and integer IDs支持 GUID 和整数 ID 的 Web API 路由
【发布时间】: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)

    ...
}

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

【问题讨论】:

标签: c# asp.net-web-api asp.net-web-api-routing


【解决方案1】:

感谢@SirwanAfifi!我遇到了您提到的 SO 问题中提到的Attribute Routing in ASP.NET 文章,但显然我当时没有看到路由属性约束的必要性。

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

【讨论】:

    猜你喜欢
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    相关资源
    最近更新 更多