2010-04-09 79 views
1

之后我插入下面我的web.config如何使ASP.NET身份验证在重定向到登录页面时保留Url Fragment?

<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#fragment 

如何达到理想的行为?

+1

您将需要编码#(23%)。我不确定这样做的最佳选择。也许你可以修改它的重写规则? – 2010-04-09 20:20:54

+0

@Claudio我想重写是唯一的选择 – 2010-04-16 15:12:29

+0

实际上(对于混淆抱歉)不认为你可以用重写规则解决它。这里的问题是,“内联锚”(#fragment)在客户端进行管理,这部分url不会转到服务器。当服务器逻辑检测到您无权访问“Menu.aspx”时,它会重定向到登录页面,失去内联锚点。如果我想出任何解决方案,我会告诉你。 – 2010-04-16 15:49:55

回答

1

到目前为止,我发现的唯一解决方案是使用重写规则将#字符编码为%23

谢谢克劳迪奥!

+0

您可以详细说明您是如何做到这一点的吗? – MCS 2010-11-24 02:14:09

+0

@MCS我在'login.aspx.cs'文件中使用了一个String.Replace – 2010-11-26 04:18:44

4

#fragment锚标记是URL的客户端(浏览器)组件。据我所知,它不会被发送到WebServer,所以服务器端不知道它是重定向的一部分。

编辑

您可以检查IIS日志和确认,因为我99%肯定这是不是这样的。

从我的本地机器上快速测试。

  1. 尝试浏览

    http://localhost/formstest/private.aspx#test

  2. 重定向

    http://localhost/formstest/login.aspx?redirect=http%3a%2f%2flocahost%2fformstest%2fprivate.aspx#test

    (注意#没有转义为重定向URL的一部分。

  3. 检查IIS的第一击。

    2010-04-12 13时36分45秒W3SVCxxx 127.0.0.1 GET /formstest/private.aspx 80 - 详情剪断 - 302 0 0

    (注意302重定向和#test的令牌上由于缺少网址

  4. 检查IIS的重定向命中。

    2010-04-12 13点36分46秒W3SVCxxx 127.0.0.1 GET /formstest/login.aspx重定向=的http%3A%2F%2flocahost%2fformstest %2fprivate.aspx 80 - DETAILS SNIPPED - 200 0 0

    (有你的200 OK HTTP响应,仍然没有#test

就像我说的,服务器不知道关于#anchor什么。只有在客户端,无论您是在请求发出之前还是之后,或者是否使用JQuery更新它,它都不会发送到服务器。

+1

对不起,如果这个#片段在页面请求后发生了变化,但在我的情况下#fragment发送到服务器,你会是正确的。 – 2010-04-12 12:11:48

+0

为什么投下来?我已经添加了更多的细节,解释了锚点不是请求的一部分......永远。读一下,或者尝试自己重新创建它并检查IIS日志。 http://www.mikeduncan.com/named-anchors-are-not-sent/ – 2010-04-12 13:58:45

+0

@Eoin您向我展示了日志,但日志不完整,但是当我在'aspx.cs'文件中处理请求时我可以通过Request.Url.Fragment访问哈希。如果这样的信息从未到达服务器,则这种属性将不存在。 – 2010-04-14 14:02:07

相关问题