ASP.NET Core中的异步路由约束

时间:2018-12-03 15:42:57

标签: asp.net-mvc asp.net-core .net-core

我有一些用于验证路由令牌的自定义路由约束。

[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()
同样,这显然会在每次请求时运行。

1 个答案:

答案 0 :(得分:0)

对于Route,它用于将请求路由到特定的控制器操作。

您知道,IRouteConstraint没有异步方法,因此不应该在.Result中使用.Wait()IRouteConstraint,这会降低性能。

通常,IRouteConstraint用于路由请求,您可以在请求路由到特定方法后在MVC过滤器tokens中检查IActionFilter