我正在创建一个网关应用,它将控制对各种其他应用(工具)的访问。
在访问该站点时,将标识用户并显示他们有权访问的工具列表。单击该链接可将用户带到该工具。 URL附加了一个令牌作为查询字符串。令牌已加密。
在到达工具站点时,系统会检查是否存在带令牌的查询字符串。它检查令牌是否有效(日期是加密的一部分)。如果确定,则令牌也会保存为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.
我已经完成了解决这个问题的想法....任何帮助表示赞赏。
答案 0 :(得分: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
第二个是一个非常破碎的网址。