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

时间:2010-03-29 19:41:55

标签: .net asp.net security authentication error-handling

我在IIS 6中使用自定义错误页面:

<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文件。 Applications文件夹在IIS中配置为应用程序,错误页面位于应用程序的根目录下。为IIS中的错误页面设置的文件权限包括匿名和Windows身份验证(我也尝试过匿名)。

3 个答案:

答案 0 :(得分:1)

查看以下link。它包含的信息可能对location标记有帮助。

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

更简单的方法是将您希望始终可访问的所有错误文件和页面移动到他们自己的目录中,然后将web.config文件添加到授予未经身份验证的访问权限的目录中。

答案 1 :(得分:1)

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

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

现在,我将用这个解决方法回答我自己的问题,除非有其他人可以证明实际上禁用身份验证的方法。

答案 2 :(得分:0)

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

之后,清理解决方案并重建。我遇到了这个问题,它与machine.config或web.config设置无关。出于某种原因,进行清理和重建会使错误消失。