我有这样的路线:
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
答案 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}")]