Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET:禁用单个aspx页的身份验证(自定义错误页)?_.net_Asp.net_Security_Authentication_Error Handling - Fatal编程技术网

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

ASP.NET:禁用单个aspx页的身份验证(自定义错误页)?,.net,asp.net,security,authentication,error-handling,.net,Asp.net,Security,Authentication,Error Handling,我正在IIS 6中使用自定义错误页: <customErrors redirectMode="ResponseRedirect" mode="On" defaultRedirect="Error2.aspx"/> 我想禁用自定义错误页的身份验证,因为引发的错误与身份验证模块有关,我不想进入无限循环,我想向用户显示一个干净的错误页。我一直在尝试以下配置来实现这一点 <location path="Error2.aspx"> <system.web>

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

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

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

查看以下内容。其中包含有关
位置的信息

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


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

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

我可以想象,在某些场景中,这可能不够(也许是MVC框架?),但对于我的用例来说,这已经足够了


现在,我将用我提出的这个解决方案来回答我自己的问题,除非其他人能够演示一种实际禁用身份验证的方法,如最初所述。

对不起,没有运气。machine.config中的allowDefinition设置为MachineToApplication,默认值。这意味着在roo中设置web.config中的值应用程序的t应该很好,这就是我设置值的地方。它不是那么简单。错误被抛出到模块的PostQuireRequestState中。这导致重定向到Error2.aspx,但模块的PostQuireRequestState再次被调用。加载错误时,application.Context.SkipAuthorization被设置为false页面(即使使用allow users=*)。由于重定向正在请求一个新页面,Application.Server.getLastError()什么都不是。代码将继续运行到它首先抛出错误的位置,因此错误页面不会显示。检查请求是否为错误页面可能会起作用,但我怀疑需要注意。