我有一些用于验证路由令牌的自定义路由约束。
[Route("{locale:locale}", Name = "HomeLocale")]
例如,必须验证语言环境值(us)以确保允许值。 允许的值列表是通过HTTP调用从API中检索的。
下面的示例代码:
internal sealed class LocaleRouteTokenConstraint : IRouteConstraint
{
public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
{
if (routeDirection == RouteDirection.UrlGeneration) //Always match when generating Urls
return true;
var routeTokenValue = values[routeKey].ToString();
//TODO Call API and check values
return true;
}
}
什么是最好的方法?
我想知道IRouteConstraint
没有提供async
方法,我不得不等待任务完成(使用.Result
或.Wait()
)
同样,这显然会在每次请求时运行。
答案 0 :(得分:0)
对于Route
,它用于将请求路由到特定的控制器操作。
您知道,IRouteConstraint
没有异步方法,因此不应该在.Result
中使用.Wait()
或IRouteConstraint
,这会降低性能。
通常,IRouteConstraint
用于路由请求,您可以在请求路由到特定方法后在MVC过滤器tokens
中检查IActionFilter
。