2

我的 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 的值。什么?!?那个是从哪里来的?

4

2 回答 2

3

试试下面的代码:

 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()));

    ...
 }
于 2012-06-05T08:17:07.323 回答
1

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

我在我的博客上有一种解决方案:
http
://beemerguy.net/blog/post/How-to-support-dynamic-URLs-in-ASPNET-(by-example).aspx 但它在 C# 中,并且翻译成 VB.NET 应该很简单。

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

于 2012-05-23T00:01:48.343 回答