Asp.net 定义表单身份验证路径在登录后不规则地重定向到ReturnUrl

Asp.net 定义表单身份验证路径在登录后不规则地重定向到ReturnUrl,asp.net,authentication,configuration,Asp.net,Authentication,Configuration,我对表单auth有一个非常不稳定的问题,我希望有人能给我一些启示。下面是web.config中的内容: <location path="Admin"> <system.web> <authorization> <deny users="?"/> </authorization> </system.web> </location> 对于作者: <authenticat

我对表单auth有一个非常不稳定的问题,我希望有人能给我一些启示。下面是web.config中的内容:

<location path="Admin">
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
</location>

对于作者:

<authentication mode="Forms">
  <forms loginUrl="~/Admin/LogOn.aspx" name="MyAppAdmin" requireSSL="false" path="/Admin" cookieless="UseCookies"/>
</authentication>

还有一个自定义成员资格提供程序针对凭证存储库实现ValidateUser。该应用程序有一个带有LoginName控件的母版页

似乎发生的情况是,有时用户成功登录,但登录页面仍然保留,而不是将其重定向到查询字符串中的ReturnUrl。我们知道他们已成功通过身份验证,因为LoginName控件显示了他们的身份,他们可以随时浏览到其他安全内容

不幸的是,我们无法确定导致这种情况的模式。不同的浏览器,不同的服务器,删除cookie,SSL或无SSL;没有明显的模式。唯一清楚的是,从表单节点中删除“path”属性后,问题无法重现


这个配置有什么明显的错误吗?对可能的原因有什么想法吗?显然,路径属性不是必需的,但它很好地将事情进一步隔离开来。

因此,我实际上在单击提交之前就找到了这个问题的答案,但为了获得相关信息,我将它放了进去。Rick Strahl真的把它钉住了;这是一个区分大小写的问题

基本上,如果您点击“/admin”,它会将您重定向到“/admin/LogOn.aspx?ReturnUrl=%2fadmin%2ffault.aspx”,然后在身份验证后,将cookie设置为路径“/admin”(在web.config中定义),然后将您重定向到“/admin/Default.aspx”。路径比较区分大小写,因此不会将您标识为已验证,因此会将您循环回表单

我的结果不稳定的原因是一些人手动键入“Admin”,而另一些人键入“Admin”。我不是下一个这样做的人,在电话里听起来一切都很好

简单的回答;去掉path属性。这太麻烦了,除非你有绝对的信心,否则情况不会改变