首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.net核心RouteData模式匹配

.net核心RouteData模式匹配
EN

Stack Overflow用户
提问于 2018-09-28 21:08:48
回答 1查看 74关注 0票数 1

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

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

举个例子,最简单的方法是:

代码语言:javascript
复制
var matches = string.Equals((string) routeData.Values["controller"], "dog",
                       StringComparison.OrdinalIgnoreCase)
                   && string.Equals((string)routeData.Values["action"], "breed", 
                       StringComparison.OrdinalIgnoreCase);

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

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-09-29 03:31:54

这可以说更优雅:

代码语言:javascript
复制
var actual = HttpContext.GetRouteData().Values;

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

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

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

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

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52556116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档