Кастомный HttpModule для IIS 7 для интегрированного - PullRequest
8 голосов
/ 06 мая 2011

У меня проблемы с пользовательским обработчиком ошибок, который я построил.Это должен быть HttpModule, но когда я добавляю его в мой web.config тег system.webServer/modules, он не инициируется.

Это мой web.config раздел:

<system.webServer>
  <modules>
    <add name="AspExceptionHandler" 
         type="Company.Exceptions.AspExceptionHandler, Company.Exceptions" 
         preCondition="managedHandler" />
  </modules>
</system.webServer>

Это код в моем HttpModule:

using System;
using System.Web;
using Company.Settings;
using System.Configuration;

namespace Company.Exceptions
{
  public class AspExceptionHandler : IHttpModule
  {
    public void Dispose() { }

    public void Init(HttpApplication application)
    {
      application.Error += new EventHandler(ErrorHandler);
    }

    private void ErrorHandler(object sender, EventArgs e)
    {
      HttpApplication application = (HttpApplication)sender;
      HttpContext currentContext = application.Context;

      // Gather information5
      Exception currentException = application.Server.GetLastError();
      String errorPage = "http://www.mycompaniesmainsite.com/error.html";

      HttpException httpException = currentException as HttpException;
      if (httpException == null || httpException.GetHttpCode() != 404)
      {          
        currentContext.Server.Transfer(errorPage, true);
      }
      else
      {
        application.Response.Status = "404 Not Found";
        application.Response.StatusCode = 404;
        application.Response.StatusDescription = "Not Found";
        currentContext.Server.Transfer(errorPage, true);
      }
    }
  }
}

Может кто-нибудь объяснить мне, что я делаю неправильно, и как работает IIS 7 Integrated Managed Pipeline Mode?Поскольку большинство ответов, которые я нашел, касаются настройки HttpModules для IIS 6.

Ответы [ 3 ]

3 голосов
/ 07 мая 2011

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

Также, если вы тестируете это на встроенном веб-сервере Visual Studio (Cassini), то раздел <system.webServer> будет игнорироваться. Вам понадобится IIS7 или IIS7.5 Express, если вы хотите, чтобы модуль загружался оттуда.

0 голосов
/ 07 августа 2012

У меня возникла эта проблема, и я обнаружил, что отключение customErrors не позволяет запускать обработчик.

т.е.: это необходимо в вашей конфигурации, чтобы событие Error было зафиксировано в модуле HttpModule:

<system.web>
    <customErrors mode="Off" />
</system.web>
0 голосов
/ 16 мая 2012

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

application.Error += ErrorHandler;

Это работает для меня, все еще анализируя причину этого способа, которым присоединение обработчика работает в IIS7.

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