Web Api路由约束元组

时间:2016-06-10 00:18:59

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

我有这样的路线:

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

1 个答案:

答案 0 :(得分:1)

这只是一个例子,你必须根据自己的需要进行调整。创建约束类

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}")]