Как я могу получить код подстановки IIS из исключения? - PullRequest
6 голосов
/ 24 апреля 2009

Я обрабатываю исключения с помощью HttpModule таким образом:

int errorCode = 500;
HttpApplication httpApp = (HttpApplication)sender;

try
{
    if (httpApp.Server != null)
    {
        Exception ex;

        for (ex = httpApp.Server.GetLastError(); ex != null; ex = ex.InnerException)
        {
            try
            {
                HttpException httpEx = ex as HttpException;
                if (httpEx != null)
                    errorCode = httpEx.GetHttpCode();

                // ... retrieve appropriate content based on errorCode
            }
            catch { }
    }
}

Для HTTP-кодов состояния (например: 302, 404, 503 и т. Д.) Все отлично работает. Однако, для кодов состояния IIS (например: 401.5, 403.4 и т. Д.), Может ли GetHttpCode извлечь их, поскольку его возвращаемое значение является целым числом?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2009

Возможно, вы не сможете. Смотрите ответ от второго к последнему здесь: http://www.velocityreviews.com/forums/t73739-sending-status-as-4011.html. HTTP RFC не определяет субкоды (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html). Похоже, что это может быть только MS - см. Последний ответ в первом ссылка, которая затем указывает здесь: http://msdn.microsoft.com/en-us/library/system.web.httpresponse.substatuscode.aspx. Хотя это то, как УСТАНАВЛИВАТЬ дополнительный код состояния, а не извлекать его, мне интересно, что он поддерживается только "с интегрированным режимом конвейера в IIS 7.0 и по крайней мере .NET Framework версии 3.0. "

Единственное, о чем я могу подумать, - это посмотреть на HRESULT в свойстве ErrorCode в HttpException и посмотреть, происходит ли что-то на уровне битов, где вы можете выяснить код и субкод из этого.

Не знаю, помогает это или нет.

0 голосов
/ 24 апреля 2009

Вы не хотите внутреннего исключения. Вы хотите:

HttpException httpEx = httpApp.Server.GetLastError() as HttpException;
if (httpEx != null)
    errorcode = httpEx == null ? 0 : httpex.GetHttpCode();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...