【问题标题】:Can I handle all errors through ASP.Net?我可以通过 ASP.Net 处理所有错误吗?
【发布时间】:2011-06-29 04:45:37
【问题描述】:

我正在尝试创建一个 404 处理页面,但我现在卡住了仅适用于 .aspx 文件的页面,这并不是我真正需要的。

我在 IIS6 上运行。该站点具有用于无扩展 URL 的通配符映射。所有请求都通过 Global.asax 中的 Application_BeginRequest,但并非所有错误都通过 Application_Error。

有没有办法让我为非 .aspx 文件引发 Application_Error?

这是 Application_Error 中的代码

HttpException serverError = (HttpException)Server.GetLastError();

if (serverError != null) {
    int errorCode = serverError.GetHttpCode();
    if (errorCode == 404) {
        Server.ClearError();
        Server.Transfer("/errorPage.aspx");
    }
}

【问题讨论】:

    标签: asp.net iis application-error


    【解决方案1】:

    我使用 IIS 6 成功处理此问题的唯一方法是在 IIS 自定义错误中添加一个特定的处理程序,该处理程序指向您的 .aspx 或 .ashx 文件之一(即指向您的 errorPage.aspx)。

    【讨论】:

    • 当我尝试它重定向到errorPage.aspx。我需要这样做以在浏览器中保持相同的 url 并返回 404 状态代码。
    • 我现在明白了。您在上面提到使用 URL 重写。如果是这种情况,那么您的设置构成 404 是什么?听起来你需要另一个重写规则,当所有其他规则都失败时才会生效。最后一条规则将重写为 errorPage.aspx,并且该页面必须确保通过响应发送状态代码 404。
    • 我在这里可能会说一些愚蠢的话,但这不会干扰对我不想重写的页面的请求吗?你是说我应该创建一个基本上匹配任何字符串的规则。对吗?
    • 这根本不是一个愚蠢的说法。我想象你正在重写应用程序中的所有内容。如果不是这种情况,您不想添加一个包罗万象的规则,因为正如您所说,它会阻止您的物理页面被执行。
    • 通常,服务器的 machine.config 或主 web.config 设置为通过 PageHandlerFactory 处理物理页面:。您始终可以创建自己的工厂,从 PageHandlerFactory 继承,通过 在配置中删除上述工厂,然后添加您的工厂。您工厂的 GetHandler 方法将调用 base.GetHandler 并检查结果是否为 null。如果为 null(404),您将创建一个 errorPage 实例并返回它。不理想,但应该可以。
    猜你喜欢
    • 2015-01-06
    • 2014-01-15
    • 2011-01-12
    • 1970-01-01
    • 2018-11-13
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    相关资源
    最近更新 更多