【问题标题】:Page.RouteData returning WebResource.axd?Page.RouteData 返回 WebResource.axd?
【发布时间】:2012-05-22 23:52:46
【问题描述】:

我的 Global.asax 中有一条规则,如下所示:

RouteTable.Routes.MapPageRoute("defaultRoute", "{*value}", "~/default.aspx")

本质上,任何实际不存在的页面都会被重定向到 default.aspx。当该页面加载时,我在 Page_Load 子中使用以下内容,如下所示:

Dim prospect_url As String = Page.RouteData.Values("value")

然后我将其转换为会话变量,如下所示:

Session("prospect_url") = prospect_url

最终,个人被重定向到另一个页面......我需要再次访问这个值,但是当我执行以下操作时:

Dim prospect_url As String = CStr(Session("prospect_url"))

我将 WebResource.axd 作为前景_url 的值。什么?!?这是哪里来的?

【问题讨论】:

    标签: asp.net vb.net session variables webresource.axd


    【解决方案1】:

    试试下面的代码:

     protected void Application_Start(object sender, EventArgs e)
     {
         RegisterRoutes(RouteTable.Routes);
    
         ...
     }
    
     private static void RegisterRoutes(RouteCollection routes)
     {
        routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
    
        ...
     }
    

    【讨论】:

      【解决方案2】:

      该全局规则适用于请求的任何资源,包括图像文件、脚本文件和任何其他资源(例如您看到的 WebResource.axd) .
      所以这里发生的事情是你的路由表规则导致它把每个请求保存到你的会话变量中,每次都覆盖最后一个值,当你自己查看会话变量时,它被留在了 WebResource.axd (它可能是不同实例上的其他东西)。

      我的博客上有一个解决方案:
      http://beemerguy.net/blog/post/How-to-support-dynamic-URLs-in-ASPNET-(by-example).aspx
      但它是用 C# 编写的,而且应该很容易翻译成 VB.NET。

      但本质上,您应该在同一请求中处理潜在客户 url 值,而不是依赖会话变量,因为其他同时请求可能会在您到达之前覆盖该值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        相关资源
        最近更新 更多