首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >指向RouteValueDictionary的字符串URL

指向RouteValueDictionary的字符串URL
EN

Stack Overflow用户
提问于 2009-09-26 16:20:54
回答 4查看 16.6K关注 0票数 19

有没有简单的方法将string URL转换为RouteValueDictionary集合?一些方法,如UrlToRouteValueDictionary(string url)

我需要这样的方法,因为我想根据我的路由设置‘解析’URL,修改一些路由值,并根据修改后的RouteValueDictionary集合使用urlHelper.RouteUrl()生成string URL。

谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-02 17:48:13

这里有一个不需要模仿的解决方案:

代码语言:javascript
复制
var request = new HttpRequest(null, "http://localhost:3333/Home/About", "testvalue=1");
var response = new HttpResponse(new StringWriter());
var httpContext = new HttpContext(request, response);
var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext));
var values = routeData.Values;
// The following should be true for initial version of mvc app.
values["controller"] == "Home"
values["action"] == "Index"

希望这能有所帮助。

票数 37
EN

Stack Overflow用户

发布于 2009-11-03 23:29:44

您需要创建一个模拟的HttpContext,因为路由约束需要它。

下面是一个我用来对我的路由进行单元测试的例子(它是从Pro ASP.Net MVC framework复制的):

代码语言:javascript
复制
        RouteCollection routeConfig = new RouteCollection();
        MvcApplication.RegisterRoutes(routeConfig);
        var mockHttpContext = new MockedHttpContext(url);
        RouteData routeData = routeConfig.GetRouteData(mockHttpContext.Object);
        // routeData.Values is an instance of RouteValueDictionary
        //...
票数 3
EN

Stack Overflow用户

发布于 2017-12-08 17:26:46

我不会依赖前面示例中的RouteTable.Routes.GetRouteData,因为在这种情况下,可能会丢失某些值(例如,如果查询字符串参数不完全适合任何已注册的映射路由)。而且,我的版本不需要模拟一堆请求/响应/上下文对象。

代码语言:javascript
复制
public static RouteValueDictionary UrlToRouteValueDictionary(string url)
{
    int queryPos = url.IndexOf('?');

    if (queryPos != -1)
    {
        string queryString = url.Substring(queryPos + 1);
        var valuesCollection = HttpUtility.ParseQueryString(queryString);
        return new RouteValueDictionary(valuesCollection.AllKeys.ToDictionary(k => k, k => (object)valuesCollection[k]));
    }

    return new RouteValueDictionary();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1481565

复制
相关文章

相似问题

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