在我的Web.Config
中插入以下配置后<authentication mode="Forms">
<forms name="appNameAuth"
path="/" loginUrl="login.aspx" protection="All" timeout="30">
<credentials passwordFormat="Clear">
<user name="user" password="password" />
</credentials>
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
所有要求
Menu.aspx#fragment
被重定向到
login.aspx?ReturnUrl=/Menu.aspx
我预计它会被重定向到
login.aspx?ReturnUrl=/Menu.aspx#fragment
如何达到预期的行为?
答案 0 :(得分:5)
#fragment
锚标记是URL的客户端(浏览器)组件。据我所知,它并没有被发送到WebServer,因此服务器端对重定向没有任何线索。
修改强>
您可以检查您的IIS日志并确认,因为我99%确定不是这种情况。
在本地机器上进行快速测试。
尝试浏览
获取重定向
http://localhost/formstest/login.aspx?redirect=http%3a%2f%2flocahost%2fformstest%2fprivate.aspx#test
(请注意,#
未作为重定向网址的一部分进行转义。
检查IIS是否第一次点击。
2010-04-12 13:36:45 W3SVCxxx 127.0.0.1 GET /formstest/private.aspx 80 - DETAILS SNIPPED - 302 0 0
(注意302重定向和URL上#test
令牌的缺席
检查IIS是否有重定向匹配。
2010-04-12 13:36:46 W3SVCxxx 127.0.0.1 GET /formstest/login.aspx redirect = http%3a%2f%2flocahost%2fformstest%2fprivate.aspx 80 - DETAILS SNIPPED - 200 0 0
(这是你的200 OK HTTP响应,但仍然没有#test
就像我说的那样,服务器对#anchor一无所知。它只在客户端,无论是在请求发出之前还是之后放入,或者是否使用JQuery更新它...它都不会发送到服务器。
答案 1 :(得分:2)
我发现使用IIS URL重写规则对我不起作用。但是,以下链接提供的解决方案非常有效:
http://codetunnel.io/how-to-persist-url-hash-fragments-across-a-login-redirect/
答案 2 :(得分:1)
到目前为止,我找到的唯一解决方案是使用重写规则将#
字符编码为%23
。
谢谢克劳迪奥!