【问题标题】:CustomErrors mode="Off"自定义错误模式=“关闭”
【发布时间】:2010-09-11 05:30:42
【问题描述】:

每次我将我的 web 应用程序上传到提供商时都会收到错误消息。由于 customErrors 模式,我看到的只是默认的“运行时错误”消息,指示我关闭 customErrors 以查看有关错误的更多信息。

恼怒,我将我的 web.config 设置为如下所示:

<?xml version="1.0"?>
<configuration>
    <system.web>
        <customErrors mode="Off"/>
    </system.web>
</configuration>

而且,我得到的只是愚蠢的远程错误页面,上面没有任何有用的信息。 我还能做些什么来关闭 customErrors ?!

【问题讨论】:

  • 尝试将@Model.Exception.Message 添加到Shared/Error.cshtml
  • 一般来说,请注意配置转换(例如 Web.Debug.config 可能会更改该值),并注意文件中该部分/属性的重复定义(显然不是在这种情况下的问题)

标签: asp.net


【解决方案1】:

在过去的几天里,这一直让我发疯,无法解决,但终于弄清楚了:

在我的 machine.config 文件中,&lt;system.web&gt; 下有一个条目:

<deployment retail="true" />

这似乎覆盖了您在 web.config 文件中指定的任何其他 customError 设置,因此将上述条目设置为:

<deployment retail="false" />

现在意味着我可以再次看到我需要的详细错误消息。

machine.config 位于

32 位

%windir%\Microsoft.NET\Framework\[version]\config\machine.config

64 位

%windir%\Microsoft.NET\Framework64\[version]\config\machine.config 

希望能帮助到那里的人,并节省几个小时的时间。

【讨论】:

  • 好点。但是,最好在完成后将零售模式恢复为真(或者在 web.config 中关闭调试模式,这会在您的开发机器上造成烦恼)。见weblogs.asp.net/lasse/archive/2009/04/28/…
  • 这似乎是 .NET 4.0 中的默认设置 - 我也遇到了同样的麻烦。同意这是在生产环境中使用的好设置,但在调试时看到 REAL 错误非常重要。
  • 不仅节省了我的时间,还挽救了我的生命。这正是对我有用的
  • 如果永远设置为 false 会有安全问题吗?
【解决方案2】:

“关闭”区分大小写。

检查你的 web.config 文件中的“O”是否是大写的,我遇到过几次(听起来很简单)

【讨论】:

    【解决方案3】:

    为了给这个问题添加更多情况(因为这是我看到的地方,因为我遇到了完全相同的问题),这是我的答案:

    在我的例子中,我从通用错误中剪切/粘贴了文本,如果你想看看有什么问题,请输入

    <system.web>
       <customErrors mode="Off"/>
    </system.web>
    

    所以这应该已经解决了,但当然不是!我的问题是上面几行(在编译和身份验证节点之前)有一个 节点,下面几行有一个结束标记 。一旦我纠正了这个,好的,问题就解决了。我应该做的只是复制/粘贴这一行:

    <customErrors mode="Off"/>
    

    这是我不断重复做的愚蠢事情的编年史,在标题为“复制和粘贴你的毁灭之路”一章中。

    【讨论】:

    • 问题:这个答案意味着ASP从顶部读取web.config和其他配置文件,即:自上而下。我认为配置文件被读取为“单个实例”,这意味着编译器首先解析配置文件以确保准确性,然后对其进行编译,但它似乎是在逐行编译它。这是真的吗?
    • @Fernando68,这可能最好作为一个单独的问题提出——在 cmets 中的讨论并不完全是最佳的。我不是 .NET 工程师,但显然 .NET 并没有逐行编译它。它是一个 Xml 文件,因此是分层的。但是如果层次结构不好,Xml 解析器会在解析时抛出异常。换句话说,它必须将整个 Xml 文件作为一个整体——但如果遇到错误的 Xml,它根本无法构建所需的对象!
    • 我已经将它作为一个单独的问题提出stackoverflow.com/questions/30471043/… 。感谢您的回复,这实际上是我在另一篇文章中得到的答案。干杯
    【解决方案4】:

    对于 Sharepoint 2010 应用程序,您还应该编辑 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\LAYOUTS\web.config 并定义 &lt;customErrors mode="Off" /&gt;

    【讨论】:

      【解决方案5】:

      我尝试了这里描述的大部分内容。我使用的是 VWD,默认的 web.config 文件包含:

          <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
              <error statusCode="403" redirect="NoAccess.htm" />
              <error statusCode="404" redirect="FileNotFound.htm" />
          </customErrors>
      

      我将 mode="RemoteOnly" 更改为 mode="Off"。仍然没有喜悦。 然后我使用了 IIS 管理器、属性、ASP.Net 选项卡、编辑配置,然后选择了 CustomeErrors 选项卡。这仍然显示 RemoteOnly。我将其更改为关闭,最后我可以看到详细的错误消息。

      当我检查 web.config 时,我看到 system.web 中有两个 CustomErrors 节点;我刚刚注意到第二个条目(我正在更改的那个在评论中)。所以尽量不要使用记事本检查远程服务器上的 web.config。

      但是,如果您使用 IIS 编辑配置的东西,它会抱怨 web.config 中的错误。然后,您可以排除所有“web.config 中是否存在 XML 语法错误”的答案

      【讨论】:

      • 在网站级别更改 web.config 对我有用。以前我曾修补过应用程序的 web.config 文件加载,但失败了。谢谢!
      【解决方案6】:

      我在这里找到了一个真正解决这个问题的答案:https://stackoverflow.com/a/18938991/550975

      只需将此添加到您的web.config

      <configuration>  
        <system.webServer>  
          <httpErrors existingResponse="PassThrough"/>  
        </system.webServer>  
      <configuration>
      

      【讨论】:

      • 我发现&lt;httpErrors errorMode="Detailed" /&gt; 提供了我需要的所有信息`
      【解决方案7】:

      如果您有权访问,通常可以在事件查看器中找到有关错误的更多信息。您的提供商也可能完全阻止了自定义错误的显示,方法是在他们的 machine.config 中覆盖它,或者将零售属性设置为 true (http://msdn.microsoft.com/en-us/library/ms228298(VS.80).aspx)。

      【讨论】:

        【解决方案8】:

        我也有这个问题,但是在使用 Apache 和 mod_mono 时。对于处于这种情况的其他人,您需要在更改 web.config 后重新启动 Apache 以强制读取新版本。

        【讨论】:

          【解决方案9】:

          如果您仍然获得该页面,则它可能在通过 Web.Config 之前就已经爆炸了

          确保 ASP.Net 具有访问 .Net Framework 文件夹、IIS 元数据库等所需的权限。您有什么方法可以检查 ASP.Net 是否正确安装并在 IIS 中正确关联?

          编辑:在 Greg 发表评论后,我想到你发布的是整个非常小的 web.config,还有更多内容吗?如果是这样,您可以发布整个 web.config 吗?

          【讨论】:

          • 我几次遇到这个问题,结果证明是 web.config 中的一个错误 - 一定要先用细齿梳子检查一下。
          • 是的,很生气我已经将我的 web.config 覆盖到这个最小设置。仍然没有快乐
          • 正在使用的应用程序池上的用户没有我的应用程序部署到的目录的读取权限。仍然无法弄清楚为什么我无法得到一个错误来表明让我知道这是问题所在。
          • 这个错误通常只能在系统/安全事件日志中找到(直到 IIS 7),但在大多数情况下很容易访问事件日志是个问题。
          【解决方案10】:

          我的问题是我在 web.config 中定义了这个

          <httpErrors errorMode="Custom" existingResponse="Replace">
            <remove statusCode="404" />
            <remove statusCode="500" />
            <error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
            <error statusCode="500" responseMode="ExecuteURL" path="/Error/Internal" />
          </httpErrors>
          

          【讨论】:

          • &lt;httpErrors errorMode="Detailed" 的替代品为例
          【解决方案11】:

          实际上,在托管我的网络应用程序时,我发现您在本地计算机上开发的代码版本比托管公司提供给您的版本更高。如果您有管理员权限,您可以在虚拟主机设置下更改 Microsoft ASP.NET 版本支持

          【讨论】:

            【解决方案12】:

            我们遇到了这个问题,这是由于 IIS 用户无法访问 Web 服务器上的机器配置。

            【讨论】:

              【解决方案13】:

              我们也遇到了这个错误,在我们的例子中是因为应用程序池用户不再拥有对 web.config 文件的权限。它失去权限的原因(之前一切都很好)是因为我们在 rar 文件中备份了站点,并且我将 web.config 的备份版本从 rar 拖到了站点中。这似乎已经删除了对 web.config 文件的所有权限,除了我,登录用户。

              我们花了一段时间才弄清楚这一点,因为我反复检查了文件夹级别的权限,但从未检查过文件级别的权限。

              【讨论】:

                【解决方案14】:

                我遇到了同样的问题,但以不同的方式找到了解决方案。

                -

                我所做的是,我在 IIS 管理器 中为 应用程序池 打开了 高级设置

                在那里,我将 启用 32 位应用程序 设置为 True

                【讨论】:

                  【解决方案15】:

                  尝试重新启动应用程序(创建一个 app_offline.htm 而不是删除它),如果您仍然收到相同的错误消息,请确保您只在 web.config 中声明了一次 customErrors,或类似的东西。 web.config 中的错误可能会对应用程序产生一些奇怪的影响。

                  【讨论】:

                  • 任何时候修改web.config网站都会重启,不需要创建app_offline.htm!
                  • 是的,我不知道为什么我建议 app_offline 重置应用程序。 :)
                  【解决方案16】:

                  您的 web.config 中是否有任何特殊字符,例如 æøå?如果是这样,请确保将编码设置为 utf-8。

                  【讨论】:

                    【解决方案17】:

                    此网络应用程序是否设置在网站目录树中的任何其他应用程序之下?检查任何父 web.config 文件的其他设置(如果有)。另外,将您的目录设置为 IIS 中的应用程序目录。

                    【讨论】:

                      【解决方案18】:

                      如果您使用的是 MVC 预览版 4,您可能会遇到这种情况,因为您使用的是 HandleErrorAttribute。 5 中的行为发生了变化,因此如果您关闭自定义错误,它不会处理异常。

                      【讨论】:

                        【解决方案19】:

                        您也可以尝试在服务器机器上的浏览器中打开该网站。我没有做很多 ASP.NET 开发,但我记得自定义错误有一个设置,仅在服务器上显示完整的错误文本,作为一种安全措施。

                        【讨论】:

                          【解决方案20】:

                          我刚刚处理了类似的问题。在我的情况下,默认站点 asp.net 版本是 1.1,而我正在尝试启动 2.0 Web 应用程序。该错误非常轻微,但尚不清楚为什么自定义错误不会消失,并且运行时从未写入事件日志。明显的修复是匹配 IIS 的 Asp.Net 选项卡中的版本。

                          【讨论】:

                          • 我们遇到了同样的问题。 “connectionstrings”节点在框架 1.1 下导致错误,而应用程序应该是 2.0
                          【解决方案21】:

                          还要确保您正在编辑 web.config 而不是 website.config,就像我之前所做的那样。

                          【讨论】:

                            【解决方案22】:

                            我遇到了同样的问题,原因是 IIS 运行的是 ASP.NET 1.1,而站点需要 .NET 2.0。

                            错误消息没有做任何事情,只是让我偏离了轨道几个小时。

                            【讨论】:

                              【解决方案23】:

                              确保添加 在 system.web 之后

                              我把它放在节点的末尾并没有工作。

                              【讨论】:

                                【解决方案24】:

                                如果您正在进行配置转换,您可能还需要从相关的 web.config 文件中删除以下行。

                                <compilation xdt:Transform="RemoveAttributes(debug)" />
                                

                                【讨论】:

                                  【解决方案25】:

                                  在这里尝试了所有答案,结果我的Application_Error 方法有这个:

                                  Server.ClearError();
                                  Response.Redirect("/Home/Error");
                                  

                                  删除这些行并设置解决了问题。 (客户端仍然被重定向到带有customErrors="On" 的错误页面。

                                  【讨论】:

                                    【解决方案26】:

                                    我遇到了同样的问题,我查看了事件查看器应用程序日志,其中清楚地提到了发生这种情况的异常。在我的情况下,例外如下......

                                    异常信息:

                                    Exception type: HttpException 
                                    Exception message: The target principal name is incorrect.  Cannot generate SSPI context.
                                    at System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app)
                                    at System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers)
                                    at System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context)
                                    at System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context)
                                    at System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)
                                    
                                    The target principal name is incorrect.  Cannot generate SSPI context.
                                    

                                    我刚刚在应用程序池中更新了我的密码,它对我有用。

                                    【讨论】:

                                      【解决方案27】:

                                      在某些情况下,web.config 的格式也可能不正确。在这种情况下,您必须逐行通过它才能工作。通常,重写规则是这里的罪魁祸首。

                                      【讨论】:

                                        【解决方案28】:

                                        这真的很奇怪。我收到此错误,重新启动服务器后它消失了。

                                        【讨论】:

                                          【解决方案29】:

                                          对我来说,这是 system.web 上方 web.config 中的错误。

                                          文件 blah 不存在,因此此时它会引发错误。因为它还没有到达 System.Web 部分,它正在使用 CUstomErrors (On) 的服务器默认设置

                                          【讨论】:

                                          • (这篇文章似乎没有为问题提供quality answer。请编辑您的答案并改进它,或者将其作为对问题的评论发布。)
                                          【解决方案30】:

                                          上述解决方案都不适合我。我的情况是

                                          我的 web.config 中有这个

                                          <log4net debug="true">
                                          

                                          要么删除所有这些,要么去阅读应用程序文件夹\logs 中的错误日志 例如.. C:\Users\YourName\source\repos\YourProjectFolder\logs

                                          【讨论】:

                                            猜你喜欢
                                            • 1970-01-01
                                            • 2014-06-27
                                            • 1970-01-01
                                            • 2012-10-26
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            • 1970-01-01
                                            相关资源
                                            最近更新 更多