【问题标题】:How to access the default ASP.NET/IIS Error Descriptions programmatically?如何以编程方式访问默认的 ASP.NET/IIS 错误描述?
【发布时间】:2018-04-24 14:54:04
【问题描述】:

IIS 上托管的各种 ASP.NET HTTP 错误的默认描述存储在哪里?可以通过代码访问吗?

EG。 404 的默认错误页面将包含以下文本:

描述:HTTP 404。您正在寻找的资源(或其中之一 它的依赖项)可能已被删除,其名称已更改,或者是 暂时不可用。请查看以下 URL 并制作 确保拼写正确。

我们可以通过代码读取这个字符串吗?

我可以捕获一个 HttpException(我知道一个 HttpException != HttpError)并执行 .GetHttpCode() 之类的操作,但我还没有看到任何地方详细说明 IIS 错误消息的存储位置以及我是否可以通过代码访问。

如果我不想自己想出自定义错误页面中的默认文本,那就太好了。


更新 1

在其中一个 cmets 之后,我调查了 IIS 以查看其错误页面的配置位置。果然,有一个错误页面目录,默认为例如“%SystemDrive%\inetpub\custerr\\404.htm”,但是这些错误消息与 Web 应用程序显示的不同(我假设由 .NET 生成)。

EG

您要查找的资源可能已被删除,但有其名称 已更改,或暂时不可用。

这些错误页面是托管在 Web 服务器上的物理页面,因此通过代码访问它们不是我想要的选项。

【问题讨论】:

  • 仅供参考。如果您依赖文本而不是代码,那么您会发现默认文本不是标准化的,并且可以被大多数网络主机或其托管应用程序覆盖。如果您试图冒泡您的低级 http 传输遇到的错误文本,那么我会对您的最终解决方案感兴趣,因为我从未找到支持 404 和其他 http 响应代码的标准化文本库。
  • 我现在不想做任何特别的事情。我只是好奇我们是否可以通过代码访问它们。
  • 检查错误页面设置,有一个文件夹。
  • 我认为您看到的消息很可能作为资源存储在 System.Web 程序集中
  • @IanGilroy 听起来很合理。我不熟悉访问 .NET 程序集资源,也不熟悉它是否可行(如果可以,建议这样做)。

标签: asp.net .net asp.net-mvc iis


【解决方案1】:

正如 cmets 中所建议的,这些字符串是 System.Web 程序集中的资源,并且没有系统的方法可以仅检索与 HTTP 错误代码相关的字符串1(与所有其他字符串相比) System.Web 中的资源)

例如,这个控制台应用程序,引用了System.Web

using System;
using System.Resources;

namespace PlayAreaCSCon
{
    class Program
    {
        static void Main(string[] args)
        {
            var rm = new ResourceManager("System.Web",
                typeof(System.Web.HttpApplication).Assembly); //Arbitrary type
            Console.WriteLine(rm.GetString("NotFound_Http_404"));
            Console.ReadKey();
        }
    }
}

生成此输出2

HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请检查以下 URL 并确保其拼写正确。

还要注意,这些字符串作为资源存储的事实是一个实现细节,没有在任何地方记录,因此您必须接受任何基于访问这些资源的代码都可能被未来对 .NET 的任何更新破坏框架(尽管在实践中不太可能改变)。


1我的意思是我必须使用反编译器来查找此示例中使用的魔术字符串“NotFound_Http_404”。没有合乎逻辑的方法可以从该字符串转到任何其他状态代码所需的字符串。

2在没有努力选择除 en-US 区域设置之外的任何内容的机器上。 YMMV。

【讨论】:

  • 很棒的分享。遗憾的是,ResourceMangager 中似乎没有诸如 GetAllKeys 之类的方法,尽管即使这样,将密钥与 HttpStatus 代码匹配也会很麻烦。
  • 您可以使用resource.GetResourceSet(...) 搜索资源,然后枚举资源集。然而,我有点惊讶地发现只有NotFound_Http_404 而没有其他 Http 错误消息。我原以为他们会在一起。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多