.net核心RouteData模式匹配

时间:2018-09-28 13:08:48

标签: .net asp.net-core .net-core url-routing

我试图使用从asp.net核心中的HttpContext.GetRouteData()方法返回的routedata对象来匹配路由。

假设端点'http://localhost/dogs/breed'存在,那么检查当前httpcontext上的路由数据是否与该端点匹配的最佳方法是什么?

作为示例,最简单的方法是:

var matches = string.Equals((string) routeData.Values["controller"], "dog",
                       StringComparison.OrdinalIgnoreCase)
                   && string.Equals((string)routeData.Values["action"], "breed", 
                       StringComparison.OrdinalIgnoreCase);

这对我来说相当不优雅,是否有更好的方法来检查此数据以在当前上下文中进行模式匹配?

谢谢

1 个答案:

答案 0 :(得分:0)

这可以说更优雅:

var actual = HttpContext.GetRouteData().Values;

var expected = new RouteValueDictionary {
    { "action", "Breed" },
    { "controller", "Dogs" },
};

return !expected.Except(actual).Any();

这将匹配到Dogs控制器及其Breed动作的路由。

我们还可以获得类型安全性:

var actual = HttpContext.GetRouteData().Values;
var expected = new RouteValueDictionary 
{
    {
        "action", nameof(ValuesController.Get) 
    },
    {
        "controller", nameof(ValuesController)
            // remove the "Controller" suffix
            .Remove(nameof(ValuesController).Length - nameof(Controller).Length)
    },
};

return !expected.Except(actual).Any();