首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过URL获取RouteData?

如何通过URL获取RouteData?
EN

Stack Overflow用户
提问于 2010-08-23 07:18:09
回答 2查看 20.1K关注 0票数 30

我需要在RoutData MVC应用程序中通过给定的URL字符串获取ASP.NET。

我已经找到了根据我的HttpContextBase字符串模拟RouteTable.Routes.GetRouteData()并将其传递给路由解析(Uri到路由)线程中的RouteTable.Routes.GetRouteData()方法的方法。

如何模拟HttpContextBase,使用RouteTable.Routes.GetRouteData()__通过URL字符串检索RouteData?或者是否有其他方法可以通过URL检索RouteData

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-24 09:00:52

我使用莫克来确定HttpContextBase的哪些成员在GetRouteData()中使用。它们是:

  • 请求
    • AppRelativeCurrentExecutionFilePath
    • PathInfo

Request.AppRelativeCurrentExecutionFilePath应该使用~返回路径,这正是我所需要的,所以实用程序类可能如下所示:

代码语言:javascript
复制
public static class RouteUtils
{
    public static RouteData GetRouteDataByUrl(string url)
    {
        return RouteTable.Routes.GetRouteData(new RewritedHttpContextBase(url));
    }

    private class RewritedHttpContextBase : HttpContextBase
    {
        private readonly HttpRequestBase mockHttpRequestBase;

        public RewritedHttpContextBase(string appRelativeUrl)
        {
            this.mockHttpRequestBase = new MockHttpRequestBase(appRelativeUrl);
        }


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

        private class MockHttpRequestBase : HttpRequestBase
        {
            private readonly string appRelativeUrl;

            public MockHttpRequestBase(string appRelativeUrl)
            {
                this.appRelativeUrl = appRelativeUrl;
            }

            public override string AppRelativeCurrentExecutionFilePath
            {
                get { return appRelativeUrl; }
            }

            public override string PathInfo
            {
                get { return ""; }
            }
        }
    }
}

然后,您可以这样使用它(例如,在~/Error/NotFound上):

代码语言:javascript
复制
var rd = RouteUtils.GetRouteDataByUrl("~/Error/NotFound")

它应该返回如下所示的对象:

代码语言:javascript
复制
RouteData.Values
{
    controller = "Error",
    action = "NotFound"
}
票数 41
EN

Stack Overflow用户

发布于 2016-12-15 19:46:53

这适用于我(.NET 4.5,MVC 5):https://average-joe.info/url-to-route-data/

代码语言:javascript
复制
System.Web.Routing.RouteData routeFromUrl =
    System.Web.Routing.RouteTable.Routes.GetRouteData(
            new HttpContextWrapper(
                new HttpContext(
                    new HttpRequest(null, path, query),
                    new HttpResponse(new System.IO.StringWriter()))));
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3545432

复制
相关文章

相似问题

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