【问题标题】:.net 4.0 Routing with QueryStrings.net 4.0 使用 QueryStrings 路由
【发布时间】:2012-02-04 06:11:11
【问题描述】:

我意识到有大量关于这个主题的文章和资源,但似乎都只展示了如何将 url 周围的 category=shoes 之类的查询字符串移动到不同的位置,例如这个产品/{类别}

我有以下查询字符串:profile.aspx?q=98c2b15f-90c3-4a7f-a33f-0e34b106877e

我试图实现一个 RoutHandler 来查询数据库以查找用户名并创建一个类似 mydomain.com/usersname

的 url

这是我尝试过的(现在一切都是硬编码的,直到我让它工作)

void Application_Start(object sender, EventArgs e)
{
    RegisterRoute(System.Web.Routing.RouteTable.Routes);
}

void RegisterRoute(System.Web.Routing.RouteCollection routes)
{
    routes.Add("Profiles", new System.Web.Routing.Route("profile/{profile}", new RouteHandler()));
}

这是处理程序类:

public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
    string username = requestContext.RouteData.Values["profile"] as string;

    HttpContext.Current.Items["q"] = "98c2b15f-90c3-4a7f-a33f-0e34b106877e";
    return BuildManager.CreateInstanceFromVirtualPath("~/pub/profile.aspx", typeof(Page)) as Page;
}

Profile.aspx 实际上查找“q”查询字符串。并且通过上述设置,它没有找到它。

我做错了什么?我如何路由或重写 url 使其漂亮 + 保留它以便页面可以找到它需要的查询字符串?

任何帮助都会很棒。提前致谢。

【问题讨论】:

    标签: c# .net-4.0 url-rewriting url-routing webforms


    【解决方案1】:

    第一件事 - 如果您使用的是 .net framework 4,则不需要创建任何处理程序,您可以直接使用 MapPageRoute 方法来路由。

    回答您的问题- use 可以在处理程序中使用如下所示的 foreach 循环,而不是专门寻找“配置文件”。

        foreach (var urlParm in requestContext.RouteData.Values)
             requestContext.HttpContext.Items[urlParm.Key] = urlParm.Value;
    
        return BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler
    

    在你的路由页面中你应该检查

        string userName = this.Context.Items["profile"].ToString();       // "userName" and is set as route parameters in Global.asax
    

    你在 RouteHandler 构造函数中设置了 VirtualPath

     RouteHandler(string virPath)
        {
            this.VirtualPath = virPath;
        }
    

    查看这些链接了解更多信息- http://www.codeproject.com/Articles/77199/URL-Routing-with-ASP-NET-4-0 http://msdn.microsoft.com/en-us/library/ie/cc668201.aspx

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-10
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2012-06-01
      相关资源
      最近更新 更多