.net - .net core RouteData 模式匹配
问题描述
我正在尝试使用从 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);
这对我来说感觉很不雅,有没有更好的方法来检查这些数据以便在当前上下文中进行模式匹配?
谢谢
解决方案
这可以说是更优雅:
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();
推荐阅读
- r - 需要从 r 中的不规则曲线中找到一条斜线的斜率
- nunit - 无法在 Allure Reporting 中获取包的结构
- python - 如何使用admitad api获取优惠券数据
- sonarqube - environment.ts 文件中的打字稿安全热点,SonarQube
- c# - 使用 Roslyn 进行运行时编译 - 如何生成 AoT 编译
- php - PHP 脚本总是超过内存限制和最大执行时间 - phpseclib
- c++ - 尝试使用 C++ 读取 CSV 文件出现 invalid_argument 错误
- sql - 如何计算 SQL 中连续时间戳的差异?
- visualization - AWS Quicksight - 将特定类别与总体平均值进行比较的堆积条形图
- php - 通过 aws 发送电子邮件是否只需要 AccessKey 和 SecretKey?