加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC:Uri到可用的路由数据

发布时间:2020-12-16 06:52:40 所属栏目:asp.Net 来源:网络整理
导读:我的问题非常简单.我有一个Uri,我想知道它映射到哪条路线,所以我可以对路线的各个部分进行一些检查:控制器,动作等. 如何从Uri前往RouteData或Route? 解决方法 根据@ tvanfosson的指示,我想出了一个能满足我需要的课程.请注意,GetRouteData实际上查看Reques
我的问题非常简单.我有一个Uri,我想知道它映射到哪条路线,所以我可以对路线的各个部分进行一些检查:控制器,动作等.

如何从Uri前往RouteData或Route?

解决方法

根据@ tvanfosson的指示,我想出了一个能满足我需要的课程.请注意,GetRouteData实际上查看RequestContextBase类上的AppRelativeCurrentExecutionFilePath和PathInfo属性,而不是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; } }
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读