Как получить доступ к стандартным описаниям ошибок ASP.NET/IIS по умолчанию? - PullRequest
0 голосов
/ 24 апреля 2018

Где хранятся значения по умолчанию Описания для различных ошибок ASP.NET HTTP, размещенных в IIS?Можно ли получить к ним доступ через код?

EG.Страница ошибки по умолчанию для 404 будет содержать следующий текст:

Описание: HTTP 404. Ресурс, который вы ищете (или одну из его зависимостей), мог быть удален, если бы его имя было изменено,или временно недоступен.Пожалуйста, просмотрите следующий URL и убедитесь, что он написан правильно.

Можем ли мы прочитать эту строку с помощью кода?

Я могу поймать HttpException (я знаю HttpException! = HttpError) и делать такие вещи, как .GetHttpCode (), но я нигде не видел подробностей, где хранятся сообщения об ошибках IIS и могу ли я получить доступ через код.

Было бы неплохо, если бы я мог повторно использоватьтекст по умолчанию на пользовательской странице ошибок, когда я сам не хочу его создавать.


ОБНОВЛЕНИЕ 1

После одного из комментариев я исследовал IIS, чтобы выяснить, где он находится.Страницы ошибок настроены.Конечно, существует каталог страниц ошибок, по умолчанию, например, «% SystemDrive% \ inetpub \ custerr \\ 404.htm», однако эти сообщения об ошибках отличаются от тех, которые отображаются веб-приложением (которое я предполагаюсоздаются .NET).

EG

Возможно, искомый ресурс был удален, изменилось его имя или временно недоступен.

Эти страницы ошибок являются физическими страницами, размещенными на веб-сервере, поэтому доступ к ним с помощью кода не является вариантом, который я ищу.

1 Ответ

0 голосов
/ 02 мая 2018

Как указано в комментариях, эти строки являются ресурсами в сборке 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. Framework (хотя на практике это вряд ли изменится).


1 Я имею в виду, что мне пришлось использовать декомпилятор, чтобы найти волшебную строку "NotFound_Http_404", используемую в этом примере. Нет логичного пути перехода от этой строки к нужной строке для любого другого кода состояния.

2 На машине, где не было предпринято никаких усилий для выбора чего-либо, кроме локали en-US. YMMV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...