4

为了能够让我的应用程序(Umbraco CMS)处理 404 错误,我需要在我的 web.config 中进行以下设置:

<httpErrors existingResponse="PassThrough" />

它适用于显示来自 Umbraco 的自定义 404 错误页面,但它不适用于在找不到静态文件时显示 404 错误页面。

例如http://www.example.com/non-existing-file.png返回 404 状态码,但响应为空。这符合 PassThrough 模式的描述:

PassThrough - 如果existingResponse 被视为“PassThrough”,自定义错误模块将始终传递来自模块的响应。如果模块未设置任何文本,此设置将使自定义错误模块返回空白响应。(http://blogs.iis.net/ksingla/archive/2008/02/18/what-to-expect-from-iis7-custom-error-module.aspx

什么是“自定义错误模块”?以及如何让它返回非空白响应?

更新

在逐步完成 Umbraco 中的请求处理例程(使用调试器)之后,我对问题空间有了更好的理解。如上面的引文所述,当existingResponse="PassThrough" 时,所有http 错误的处理都在自定义模块中完成。因此,要回答我自己的问题,在这种情况下,“自定义错误模块”就是“UmbracoModule”。

解决此问题的一种方法是创建一个新的自定义模块,该模块将检查磁盘上是否存在静态文件。它可以做得很好,我从 IIS 中读取静态文件列表并从 web.config 中读取 customErrors 或 httpErrors 元素的配置以获取自定义错误页面。但我有点认为这是粗略的解决方案。我宁愿将责任转回给 IIS。

有任何想法吗?

4

1 回答 1

0

你是对的。为了其他寻求帮助的人的利益,这里有一些关于 404 处理的额外信息。

于 2015-06-24T22:03:49.967 回答