Web Api 路由约束元组

Web Api route constraint tuples

我有这样的路线:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{tenantParam1}/{tenantParam2}/{controller}/{id},
    constraints: ???,
    defaults: new { id = RouteParameter.Optional }
);

对于 tenantParam1 和 tenantParam2,我需要对其进行约束,以便只允许某些值的元组。有办法吗?

编辑:澄清一下,重要的部分是我需要一起评估 tenantParam1 和 tenantParam2,作为一个元组。例如,假设这些是我的有效租户:

param1 | param2
ABC    | 123
ABC    | 456
DEF    | 789
DEF    | 012

这意味着以下路线有效:

/api/ABC/123
/api/ABC/456
/api/DEF/789
/api/DEF/012

但以下路线无效:

/api/ABC/789
/api/ABC/012
/api/DEF/123
/api/DEF/456

这只是一个示例,您可以根据需要调整它。创建约束 class

public class SomeConstraint : IHttpRouteConstraint
{
    public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, 
        IDictionary<string, object> values, HttpRouteDirection routeDirection)
    {
        //get value from values dictionary object
        //return true or false 
        //false will block the call
     }
}

然后在配置文件中注册

public static void Register(HttpConfiguration config)
    {
        var constraintResolver = new DefaultInlineConstraintResolver();
        constraintResolver.ConstraintMap.Add("someConstraint", typeof(SomeConstraint ));

        config.MapHttpAttributeRoutes(constraintResolver);
    }

并如下使用

[Route("{value:someConstraint}")]