1

我正在创建一个网关应用程序,它将控制对各种其他应用程序(工具)的访问。

在访问该站点时,会识别用户并显示他们有权访问的工具列表。单击该链接将用户带到该工具。URL 附有一个标记作为查询字符串。令牌已加密。

到达工具站点后,系统会检查是否有带有标记的查询字符串。它检查令牌是否有效(日期是加密的一部分)。如果 OK,则令牌也保存为 cookie,有效期为 8 小时并授予访问权限。

如果用户直接从书签中点击工具站点,系统会再次检查是否有令牌以及它是否有效。如果没有令牌作为查询字符串传递,那么系统将查看它是否仍然具有有效的 cookie。如果没有有效的令牌或 cookie,站点将调用 response.redirect 到网关以及两个查询字符串 t 和 r。t 是工具的数字 ID,r 是工具 URL。

应该发生的是,用户将被重定向到网关,网关将检查用户是否可以访问工具 id t,以及是否已经重定向回 r,并附加了一个新的令牌作为查询字符串。

我的代码有以下......

Private GatewayURL As String = "http://GatewayURL/default.aspx?t=2&r="
Private ToolURL As String = "http://ToolURL/default.aspx" 
In my page load I have….
…
If AuthenticationPass = False Then
    'We are not authenticated...
    Response.Redirect(GatewayURL & ToolURL, True)
End If
…

不幸的是,当触发此操作时,我收到以下错误...

Invalid path for child request 'http://GatewayURL/default.aspx'. A virtual path is expected.

我已经没有解决这个问题的想法了....任何帮助表示赞赏。

4

1 回答 1

3

您应该URL encode查询字符串参数:

Response.Redirect(GatewayURL & HttpUtility.UrlEncode(ToolURL), True)

以便您重定向到:

http://GatewayURL/default.aspx?t=2&r=http%3A%2F%2FToolURL%2Fdefault.aspx

代替:

http://GatewayURL/default.aspx?t=2&r=http://ToolURL/default.aspx

第二个是一个非常破碎的网址。

于 2013-01-28T14:10:05.473 回答