2010-03-29 89 views
5

我使用的是自定义错误页在IIS 6:ASP.NET:禁用单个aspx页面的身份验证(自定义错误页面)?

<customErrors redirectMode="ResponseRedirect" mode="On" defaultRedirect="Error2.aspx"/> 

我要为自定义错误页禁用验证,因为要提出的错误与验证模块,我不想要进入一个无限循环,我想向用户显示一个干净的错误页面。我一直在尝试下面的配置来做到这一点。

<location path="Error2.aspx"> 
<system.web> 
    <authentication mode="None"/> 
    <authorization> 
    <allow users="?"/> 
    <allow users="*"/> 
    </authorization> 
</system.web> 
</location> 

我得到一个System.Configuration.ConfigurationErrorsException设置验证模式的行。

在应用程序级别之外使用注册为allowDefinition ='MachineToApplication'的节是错误的。此错误可能是由于虚拟目录未被配置为IIS中的应用程序。

我已验证应用程序文件夹下的子目录中没有其他web.config文件。应用程序文件夹被配置为IIS中的应用程序,错误页面位于应用程序的根目录下。为IIS中的错误页面设置的文件权限包括匿名和Windows身份验证(我也试过匿名)。

回答

1

我将自定义错误重定向模式更改为rewriteResponse。通过这样做,不会为错误页面发出单独的请求,引发错误的验证模块不会被重新执行等。

我可以想象,这在某些情况下可能不够用(可能是MVC框架?)但对于我的用例来说,这已经足够了。

现在,我将回答我提出的这个解决方法的问题,除非其他人能够证明实际上禁用身份验证的方法。

0

打开您的IIS设置,并确保根IIS(machine.config)允许写入违规属性(system.web.authentication或system.web.authorization,具体取决于错误中引用的行号)。

之后,清理您的解决方案并重建。我有这个问题,并且它与machine.config或web.config设置无关。出于某种原因,做一个干净的和重建使错误消失。

+0

对不起,没有运气。 machine.config中的allowDefinition被设置为默认的MachineToApplication。这意味着在应用程序的根目录下设置web.config中的值应该没问题,这是我设置值的位置。 – 2010-03-29 20:16:52

1

看看下面的link。它包含的信息可能对location标签有帮助。

<location path="404.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

更简单的方法将是移动要始终对自己的目录中可以访问所有的错误文件和网页,然后web.config文件添加到授予未经验证的访问的目录。

+0

这不是那么简单。该错误在模块的PostAquireRequestState中引发。这导致重定向到Error2.aspx,但模块的PostAquireRequestState再次被调用。加载错误页面时(即使允许users = *),Application.Context.SkipAuthorization设置为false。由于重定向请求新页面,因此Application.Server.getLastError()不起作用。代码继续在第一个地方抛出错误,因此错误页面不显示。检查请求是否是错误页面可能工作,但我怀疑警告。 – 2010-03-29 20:49:25

相关问题