CustomErrors模式=“关闭”


254

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

激怒了,我将我的web.config设置如下:

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

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


1
尝试添加@Model.Exception.MessageShared/Error.cshtml
Muflix'2

通常,请注意配置转换(例如可以更改该值的Web.Debug.config),并注意文件中该节/属性的重复定义(在这种情况下显然不是问题)
Graham

Answers:


164

在过去的几天里,这一直使我发疯,无法绕开它,但终于弄明白了:

在我的machine.config文件中,我在下有一个条目<system.web>

<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 

希望可以帮助某人,并节省数小时的剃发时间。


好点子。最好在完成后将零售模式重新设置为true(或在web.config中关闭调试模式,这会给开发计算机带来麻烦)。参见weblogs.asp.net/lasse/archive/2009/04/28/…–
Stephen Kennedy

这似乎是.NET 4.0中的默认设置-我在解决它时遇到了同样的麻烦。同意在生产环境中使用它是一个很好的设置,但是在调试时看到REAL错误非常重要。
杰里米

不仅节省时间,还挽救了我的生命。这正是对我
有用的东西

142

“关闭”区分大小写。

检查您的web.config文件中的“ O”是否为大写,我已经经历了几次(听起来很简单)


49

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

就我而言,我从通用错误中剪切/粘贴了文本,说如果您想知道出什么问题了,请说

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

因此,应该可以解决此问题,但是当然不能解决!我的问题是,在上面的<system.web>节点(在编译和身份验证节点之前)有几行,而在下面的几行有一个结束标记</system.web>。一旦我纠正了这个问题,就可以解决问题。我应该做的是仅复制/粘贴以下行:

<customErrors mode="Off"/>

摘录自“我一遍又一遍地做的愚蠢的事情”,在“复制并粘贴破坏方式”一章中。


问题:此答案暗示ASP从顶部(即:自上而下)读取web.config和其他配置文件。我认为配置文件被读取为“单个实例”,这意味着编译器首先分析配置文件的准确性,然后对其进行编译,但似乎正在逐行对其进行编译。真的吗?
Fandango68

@ Fernando68,最好将其作为一个单独的问题提出-在评论中进行讨论并非最佳。我不是.NET工程师,但显然.NET不会逐行编译它。这是一个Xml文件,因此是分层的。但是,如果层次结构的格式不正确,则Xml解析器将在解析它时引发异常。换句话说,它必须将整个Xml文件作为一个整体-但是,如果遇到不良的Xml,则根本无法构建所需的对象!
Cyber​​herbalist 2015年

我已经将其作为单独的问题stackoverflow.com/questions/30471043/…提出来。感谢您的回复,这实际上是我在其他帖子中得到的答案。干杯
Fandango68

10

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


7

我尝试了这里描述的大多数内容。我正在使用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文件加载,但失败了。谢谢!
The1nk 2013年



5

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


5

如果您仍在访问该页面,则可能是在通过Web.Config之前它已经被炸掉了。

确保ASP.Net拥有对诸如.Net Framework文件夹,IIS Metabase等之类的权限。您是否有任何方法可以检查ASP.Net是否已正确安装并正确地与IIS关联?

编辑:格雷格(Greg)的评论发生在我身上后,我认为您发布的内容是整个非常小的web.config,还有更多内容吗?如果可以,您可以发布整个web.config吗?


几次我遇到这个问题,结果证明这是web.config中的错误-绝对要先用细齿梳检查一下。
格雷格·霍尔曼

是的,很生气,我已经将我的web.config覆盖到了此最小设置。仍然没有喜悦
Radu094

正在使用的应用程序池上的用户对我的应用程序部署到的目录没有读取权限。仍然不知道为什么我无法得到一个错误来表明那是问题所在。
lambacck

通常只能在系统/安全事件日志中找到此错误(直到IIS 7),但是在大多数情况下,轻松访问事件日志是麻烦所在。
尼克·克拉弗

5

我的问题是我在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>

2
替代以<httpErrors errorMode="Detailed"帮助为例
it3xl

2

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


2

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


2

我们还遇到了此错误,在我们的情况下,这是因为应用程序池用户不再具有对web.config文件的权限。它失去权限的原因(之前一切都很好)是因为我们在rar文件中备份了该网站,并且我将rar的web.config备份版本拖到了该站点中。这似乎已删除了web.config文件的所有权限,但我(登录用户)除外。

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


2

我遇到了同样的问题,但是发现解决方法有所不同。

--

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

我将“ 启用32位应用程序”设置True


1

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


1
每当您修改web.config时,网站都将重新启动,无需创建app_offline.htm!
马特·弗雷尔

是的,我不知道为什么我建议使用app_offline重设应用程序。:)
Adam Vigh


1

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


1

如果使用的是MVC预览4,则可能是因为使用了HandleErrorAttribute而导致的。该行为在5中进行了更改,因此,如果您关闭自定义错误,则不会处理异常。


1

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


1

我刚刚处理过类似的问题。以我为例,当我尝试启动2.0 Web应用程序时,默认站点asp.net版本为1.1。该错误相当琐碎,但尚不清楚为什么自定义错误不会消失,并且运行时也从未写入事件日志。明显的解决方法是匹配IIS的Asp.Net选项卡中的版本。


我们有同样的问题。“ connectionstrings”节点在框架1.1下导致错误,而应用程序本应为2.0
mosheb 2012年


0

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

错误消息什么也没做,只是让我偏离了几个小时。


0

确保您在system.web之后添加

我把它放在节点的末端,但是没有用。


0

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

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

0

在尝试了所有答案之后,结果证明我的Application_Error方法具有以下特点:

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

删除这些行并进行设置可以解决此问题。(客户端仍然通过重定向到错误页面customErrors="On")。


0

我遇到了同样的问题,并且浏览了事件查看器应用程序日志,其中清楚地提到了发生此异常的原因。我的情况如下

异常信息:

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.

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


0

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


0

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


0

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

该文件不存在,所以它当时抛出一个错误。因为尚未到达System.Web部分,所以它正在使用CUstomErrors的服务器默认设置(打开)


(此帖子似乎无法为问题提供高质量的答案。请编辑您的答案并加以改进,或者只是将其作为对问题的评论。)
sɐunıɔןɐqɐp18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.