我试图在我的web.config中添加一个异常,这样一个页面就不需要身份验证了。但是,它仍然重定向到登录页面。
问题不是如何设置web.config。为什么?我们的系统(无论是好是坏)除了web.config之外还有一堆仪器仪表。我们有global.asax和定制的HttpHandlers。代码库不是很大,但是重定向有很多潜在的原因。
我想知道的是如何最好地确定重定向的原因。有什么方法可以找出是什么代码触发了重定向?
发布于 2008-11-18 19:39:45
如果您可以调试应用程序,从HttpApplication.BeginRequest开始使用global.asax和逐步遍历System.Web的引用源将是一种蛮力的方式。
或者,在HttpResponse.Redirect(string,bool)上设置一个断点并遵循调用堆栈--我怀疑运行时是否有其他方法来重定向请求。
如果没有出现任何问题(或者您无法调试),并且由于蛮力方法可能会导致大量代码(而且您的问题似乎与安全性有关),那么您可能只需挂起HttpApplication即可。AuthenticateRequest和HttpApplication.AuthorizeRequest,(以及相关的Post* events),并查看那里的情况。
如果您使用的是表单身份验证,我碰巧知道FormsAuthenticationModule在HttpApplication.EndRequest处查找状态代码401来决定是否重定向请求。任何设置401 (访问被拒绝)的内容都会导致重定向,而不是将401返回到浏览器。
发布于 2008-11-18 19:15:57
当向需要身份验证的asp.net页面发出请求时,asp.net将重定向到指定的登录页,默认情况下提供标识原始请求页的ReturnUrl querystring参数。虽然这个ReturnUrl是可配置的,但是如果您没有修改配置,它的存在应该表明身份验证失败了。
在这种情况下,您应该专注于对页面的身份验证设置进行故障排除。戈登·贝尔的回答看起来不错。
<system.web>
...
</system.web>
<location path="NoAuthNeeded.aspx">
<system.web>
<authorization>
<allow roles="*" />
<allow roles="?" />
</authorization>
</system.web>
</location>
发布于 2008-11-18 19:49:15
另外,如果这只发生在您的生产应用程序中,您可能会发现使用WinDBG发生了什么。松散地遵循这篇文章,您将执行以下操作:
.loadby sos mscorwks
也会断点sxe clr
到断点g
继续现在,您的应用程序将在任何例外情况下崩溃。由于Response.Redirect通常抛出一个ThreadAbortException,这可能是一种简单的中断方式。然后执行一个!printexception
来获取堆栈跟踪。如果我的~*e!clrstack
foo没有让我看到当前正在执行的所有线程的托管堆栈,也可以执行WinDBG。
请注意,当您被破坏时,您冻结了w3wp进程,所以要快速!
希望您可以使用另一种方法,但是如果其他方法都失败了,这可能会帮助您开始工作。
https://stackoverflow.com/questions/299695
复制相似问题