ASP.NET MVC:可用路由数据的 Uri

2024-03-22

我的问题很简单。我有一个 Uri,我想弄清楚它映射到哪个路由,这样我就可以对路由的各个部分进行一些检查:控制器、操作等。

如何从 Uri 转到 RouteData 或 Route?


根据@tvanfosson 的指导,我想出了一个可以满足我需要的课程。请注意,GetRouteData实际上看着AppRelativeCurrentExecutionFilePathPathInfo上的属性RequestContextBase类,而不是Url财产。

public class RouteInfo
{
    public RouteInfo(RouteData data)
    {
        RouteData = data;
    }

    public RouteInfo(Uri uri, string applicationPath)
    {
        RouteData = RouteTable.Routes.GetRouteData(new InternalHttpContext(uri, applicationPath));            
    }

    public RouteData RouteData { get; private set; }

    //********************
    //Miscellaneous properties here to deal with routing conditionals... (e.g. "CanRedirectFromSignIn")
    //********************

    private class InternalHttpContext : HttpContextBase
    {
        private HttpRequestBase _request;

        public InternalHttpContext(Uri uri, string applicationPath) : base()
        {
            _request = new InternalRequestContext(uri, applicationPath);
        }

        public override HttpRequestBase Request { get { return _request; } }
    }

    private class InternalRequestContext : HttpRequestBase
    {
        private string _appRelativePath;
        private string _pathInfo;

        public InternalRequestContext(Uri uri, string applicationPath) : base()
        {
            _pathInfo = uri.Query;

            if (String.IsNullOrEmpty(applicationPath) || !uri.AbsolutePath.StartsWith(applicationPath, StringComparison.OrdinalIgnoreCase))
            {
                _appRelativePath = uri.AbsolutePath.Substring(applicationPath.Length);
            }
            else
            {
                _appRelativePath = uri.AbsolutePath;
            }
        }

        public override string AppRelativeCurrentExecutionFilePath { get { return String.Concat("~", _appRelativePath); } }
        public override string PathInfo { get { return _pathInfo; } }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC:可用路由数据的 Uri 的相关文章

随机推荐

  • Google 表格脚本错误“无法访问服务:镜像”

    我在 Google Sheets 中有一个脚本 实际上我无法执行任何操作 例如 function onOpen e var ui SpreadsheetApp getUi Or SpreadsheetApp or FormApp ui cr
  • 从封闭泛型中提取泛型类型

    我想要这样的东西 class Foo
  • DOM VBA IE11 自动在网站上下订单 - OnChange 和图片上传出现问题

    我们有一个虚拟助手在此网站上下了数百个球标订单 https www golfballs com Golf Misc Tools Classic Photo Poker Chips 3 Pack htm https www golfballs
  • 如何访问所有 URL 的 Selenium Python

    我试图访问所有显示的网址 但它首先访问而不是所有 谷歌搜索网址 browser get https www google co uk search q Rashmi oq Rashmi aqs chrome 69i57j69i60l3 68
  • 如何在 Windows 中查看正在执行的 java 程序的类路径和 jvm 参数

    在 nix 我只是这样做ps ef grep java查看正在执行的 java 程序的 jvm 参数和类路径 如何在 Windows 命令提示符中看到它 我想看看某些 jar 是否实际上位于正在运行的 weblogic 服务器的类路径中 从
  • Javascript for循环var“i”被视为字符串?

    我正在使用 Titanium 构建一些移动应用程序 我注意到这会产生我意想不到的结果 data a b c d for var i in data Ti API debug i 1 这将打印 01 11 12 13 这是 Titanium
  • 错误:java.lang.IllegalArgumentException:不支持额外示例

    如果我执行这个方法 tiff TiffImage getTiffImage rafa i false 然后就是通过下面的异常 谁能给我这个异常的任何解决方案 Exception Stack Trace java lang IllegalAr
  • 在 Objective C 中使用枚举类型作为属性

    我是一名资深的 NET 开发人员 这是我第一次涉足 Objective C 编程 我在处理枚举类型的属性时遇到困难 一些上下文 我有一个类标头和枚举 如下所示 typedef enum Open Unavailable Unknown Lo
  • RichTextBox 和特殊字符 C#

    我需要将 RTF 格式的文本放入 richtextbox 中 我尝试将其与richtextbox rtf TextString参数 但问题是该字符串具有特殊字符 并且 Richtextbox 无法正确显示所有字符串 我正在使用的字符串和代码
  • 字节码指令和处理器操作之间的关系

    Java 规范保证原始变量赋值始终是原子的 除了long和双types 相反 获取并添加 http en wikipedia org wiki Fetch and add对应著名的操作i 增量操作将是非原子的 因为会导致读取 修改 写入操作
  • null 对象的 FluentValidation 规则

    我一直在尝试弄清楚如何创建一个 FluentValidation 规则 在验证其属性之前检查它正在验证的对象的实例是否不为空 我宁愿将这个空验证封装在验证器中 而不是在调用代码中执行它 请参阅下面的示例代码 其中包含需要所需逻辑的注释 na
  • 如何对链表进行排序?

    我有一个链接列表 我想按特殊顺序对其进行排序 我尝试使用冒泡排序 由于我的结构 称为 Node 中有许多数据类型 因此我无法交换这些值 struct Node int data Node next Node int x data x nex
  • 桌面组合被禁用错误

    在我的 NET 4 0 上的 WPF 应用程序中 我让用户报告两个错误 这些错误似乎非常间歇性 我无法处理 下面 我发布了消息和堆栈跟踪的最上面一行 如果需要 我可以发布完整的堆栈跟踪 Message Desktop composition
  • Android:检查我的应用程序是否允许运行后台活动

    我有一个运行秒表服务的应用程序 并且我在前台运行该服务 我有一个显示计时器的通知 每秒更新一次 在我离开应用程序 30 秒后 通知停止更新 我发现原因是我的设备的电池优化 在我的应用程序的系统设置中 有一个电池优化部分 其中包含一个名为Al
  • WebSphere - 无法加载 Logmanager“org.apache.logging.log4j.jul.LogManager”

    我有一个运行 Web 应用程序的 WebSphere 应用程序服务器 我从 Eclipse 启动服务器 该应用程序中的主要日志记录框架是 log4j2 但也有一些使用 java util logging 的第三方库 我想将这些日志重定向到
  • 取消选中单选按钮[重复]

    这个问题在这里已经有答案了 该应用程序是一个步进音序器应用程序 具有 16 个无线电组 每组有 8 个按钮 它工作得很好 除非一个组选择了一个按钮 否则我无法将其关闭 除非我使用我创建的清除按钮来清除所有无线电组 我想添加的是一些代码 它表
  • Go:是否有可以在模板内使用的模数

    我的问题如标题所述 我正在尝试做类似的事情 range index element Products if index 4 0 div class row end div class columns small 3 product img
  • GitLab CI 启用 SCP

    我目前正在使用 GitLab com 上的共享运行器之一 是否可以设置 gitlab ci yaml 文件 以便构建可以将 SCP 文件从远程服务器传输到运行器上 我的目标是 SCP 文件 这些文件是我的构建所必需的依赖项 但它们不会在任何
  • C 数组中的指针递增

    我试图理解下面的程序 具体来说 定义cur name以及指针的递增cur age在 printf 语句中 cur age i 必须索引数组中的每个整数 但我希望它指向内存中的连续地址 而不是给定 int 的下一个整数是 4 个字节 即为什么
  • ASP.NET MVC:可用路由数据的 Uri

    我的问题很简单 我有一个 Uri 我想弄清楚它映射到哪个路由 这样我就可以对路由的各个部分进行一些检查 控制器 操作等 如何从 Uri 转到 RouteData 或 Route 根据 tvanfosson 的指导 我想出了一个可以满足我需要