我可以在哪里为我的应用程序中的目录(例如 App_Code、App_Browsers 等)设置自定义错误?我已经在 web.config 中配置了 customErrors 并且按预期工作。例如,
http://www.mysite.com/bla.aspx > 重定向到 404 页面
但
http://www.mysite.com/App_Code/ > 显示“系统找不到指定的文件”。
我的站点没有物理 App_Code 目录。这是我可以在 IIS 中更改的东西吗?
我可以在哪里为我的应用程序中的目录(例如 App_Code、App_Browsers 等)设置自定义错误?我已经在 web.config 中配置了 customErrors 并且按预期工作。例如,
http://www.mysite.com/bla.aspx > 重定向到 404 页面
但
http://www.mysite.com/App_Code/ > 显示“系统找不到指定的文件”。
我的站点没有物理 App_Code 目录。这是我可以在 IIS 中更改的东西吗?
我相信您需要在 IIS 本身中设置错误页面,因为您谈论的请求永远不会到达 ASP.NET 应用程序。您的第一个示例有效的原因是 IIS 识别 .ASPX 扩展名并将其转发到 ASP.NET。
您正在尝试从受保护的文件夹中提供内容服务... ??
我认为您可能需要允许访问这些文件夹才能获得您正在寻找的好错误......
http://www.webdavsystem.com/server/documentation/hosting_iis_asp_net/protected_folders
话虽这么说......这些文件夹受到保护是有原因的。
我永远不会把我需要 IIS 服务的任何东西放在受保护的文件夹中。
但总有理由去做某事?在我短暂的一生中,我打破了一些规则:)
更新:
当我在本地尝试时发现了这个:http: //support.microsoft.com/kb/942047/
看起来那些保留的目录会抛出特殊的 404,您也许可以让 IIS 以 404.8 类型为目标...而不向这些目录开放服务
一种方法是在 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 文件中的损坏的图像参考 - 打破上面代码的第二行有助于识别丢失的文件}
将通配符映射添加到 IIS 以通过 ASP.net 运行所有请求,然后您可以使用 Global.asax 来处理错误。
取自这里:
按照以下步骤使用 IIS 6.0 创建通配符脚本映射:
- 右键单击网站并选择属性
- 选择主目录选项卡
- 单击配置按钮
- 选择映射选项卡
- 单击插入按钮(参见图 4)
- 将 aspnet_isapi.dll 的路径粘贴到 Executable 字段中(您可以从 .aspx 文件的脚本映射中复制此路径)
- 取消选中标记为验证文件存在的复选框
- 单击确定按钮