我正在尝试使用从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);对我来说,这感觉相当不优雅,有没有更好的方法来检查这些数据,以便在当前上下文中进行模式匹配?
谢谢
发布于 2018-09-29 03:31:54
这可以说更优雅:
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();https://stackoverflow.com/questions/52556116
复制相似问题