ASP.NET / Web.config:仅在出现404错误时重定向customErrors

13

我有这个场景:

用户来到我的网站并点击一个链接,但这个链接已经不存在了,他应该被重定向到一个自定义的错误页面。(这个功能已经生效)

如果用户做了一些导致错误的事情,他应该看到堆栈跟踪和真正的错误页面。

这是我的当前Web.config文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
        <customErrors>
          <error statusCode="404" redirect="/errors/404.htm" />
        </customErrors>
        <compilation debug="true" strict="false" explicit="true" />
    </system.web>
</configuration>

使用这个配置,404错误会被重定向到正确的站点,但HTTP 500错误将如下所示:

'/' 应用程序中的服务器错误

描述:服务器上发生了应用程序错误。当前应用程序的自定义错误设置防止远程查看应用程序错误的详细信息(出于安全考虑)。但是,它可以在运行在本地服务器机器上的浏览器中查看。

详细信息:要启用可在远程机器上查看此特定错误消息的详细信息,请在当前 Web 应用程序的根目录中创建一个名为“web [.config”]的配置文件内的标记。然后,该标记应将其“mode”属性设置为“Off”。

[...]

但在这种情况下,我想显示堆栈跟踪。

我该怎么做?

注意:我们使用的是Linux,带有Mono <- FastCGI -> Lighttpd结构。

2个回答

26
在下面的web.config条目中,找不到(404)条件将会把用户发送到PageNotFound.aspx页面。
使用mode =“Off”,所有人(本地和远程用户)都将看到错误详细信息。
<customErrors mode="Off">
     <error statusCode="404" redirect="~/errorPages/PageNotFound.aspx" />
</customErrors>

使用 mode="RemoteOnly",本地用户将看到带有堆栈跟踪和编译细节的详细错误页面。远程用户将会看到 GeneralError.aspx 页面。

<customErrors mode="RemoteOnly" defaultRedirect="~/errorPages/GeneralError.aspx">
     <error statusCode="404" redirect="~/errorPages/PageNotFound.aspx" />
</customErrors>

0

Ray Van Halens的答案是正确的,但这不是实际的问题。

不显示堆栈跟踪的原因是mono本身的一个错误。除了编写自己的错误页面来显示堆栈跟踪外,没有其他方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接