【问题标题】:Custom Errors for "App" folders? (ASP.NET)“App”文件夹的自定义错误? (ASP.NET)
【发布时间】:2008-11-14 16:31:50
【问题描述】:

在哪里可以为应用程序中的目录(例如 App_Code、App_Browsers 等)设置自定义错误?我已经在 web.config 中配置了 customErrors 并且按预期工作。例如,

http://www.mysite.com/bla.aspx> 重定向到 404 页面

但是

http://www.mysite.com/App_Code/ > 显示“系统找不到指定的文件。”

我的网站没有物理 App_Code 目录。这是我可以在 IIS 中更改的内容吗?

【问题讨论】:

    标签: asp.net iis error-handling web-config


    【解决方案1】:

    您正在尝试从受保护的文件夹中传送内容... ??

    我认为您可能需要允许访问这些文件夹才能获得您正在寻找的好错误...

    http://www.webdavsystem.com/server/documentation/hosting_iis_asp_net/protected_folders

    话虽如此...这些文件夹受到保护是有原因的。

    我永远不会将任何我需要 IIS 服务的东西放在受保护的文件夹中。

    但总有理由去做某事?在我短暂的一生中,我打破了一些规则:)

    更新:

    当我在本地尝试时发现这个:http://support.microsoft.com/kb/942047/

    看起来那些保留的目录会抛出特殊的 404,您可能可以让 IIS 以 404.8 类型为目标...而不向这些目录开放服务

    【讨论】:

    • 不,我不想允许访问。我只希望这些文件夹的错误消息与所有其他错误具有一致的外观。抱歉,如果不清楚。
    • 不用担心~,猜出该网址的用户的可能性是什么,他们需要看到干净的错误?只要您从不构建具有这些受保护文件夹引用的 url,真正的最终用户就不会请求您,我认为允许从这些文件夹或基于这些文件夹提供任何类型的服务的危险不值得统一错误的收益页?祝你好运
    • 是的,我意识到这不太可能发生。我只是想知道是否有一种简单的方法来实现它。 microsoft.com 提供自定义错误,而在 asp.net 上运行的其他几个站点则不提供。
    • 您可能还想在 Serverfault 上提交此内容,以查看 IIS 管理员是否有想法?
    【解决方案2】:

    我相信您需要在 IIS 本身中设置错误页面,因为您所说的请求永远不会到达 ASP.NET 应用程序。您的第一个示例有效的原因是 IIS 识别 .ASPX 扩展名并将其转发到 ASP.NET。

    【讨论】:

      【解决方案3】:

      一种方法是在 global.asax 文件中提供重定向:

       void Application_Error(object sender, EventArgs e) 
      {
          //uncomment this to narrow down 'helpful' microsoft messages
          //HttpRequest request = ((HttpApplication)sender).Context.Request; 
      
      
          Exception ex = Server.GetLastError();
          //ErrorManager is a custom error handling module
          ErrorManager.ProcessError(ex);
          Response.Redirect("~/error.aspx?error=" + HttpUtility.UrlEncode(ex.Message), true);
      }
      

      { 顺便说一句,我遇到了一个我无法追踪的异常——它只是说“找不到文件”,但没有说哪个文件丢失了。原来是 css 文件中的损坏的图像引用 - 打破上面代码的第二行有助于识别丢失的文件 }

      【讨论】:

      • 我试过了,但结果是一样的。我注意到在 .NET 上运行的几个大型站点显示了一般错误。也许只有我一个人,但我希望所有错误都能优雅地处理给用户。如果您尝试访问 /App_Code 目录,即使 SO 也会显示空白屏幕。
      【解决方案4】:

      添加通配符映射到 IIS 以通过 ASP.net 运行所有请求,然后您可以使用 Global.asax 来处理错误。

      拍摄from here

      按照以下步骤使用 IIS 6.0 创建通配符脚本映射:

      • 右键单击网站并选择属性
      • 选择主目录选项卡
      • 点击配置按钮
      • 选择映射选项卡
      • 单击插入按钮(参见图 4)
      • 将 aspnet_isapi.dll 的路径粘贴到 Executable 字段中(您可以从 .aspx 文件的脚本映射中复制此路径)
      • 取消选中标记为“验证文件是否存在”的复选框
      • 点击确定按钮

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多