Вопрос

Я получаю это исключение, когда пытаюсь получить доступ к объекту httpContext.current.request.

Я видел ответы в L1., L2. а также L3. ... Итак ... Мой вопрос тогда есть:

Для чего в мире сейчас есть ihttpmodules?

Я хотел разработать модуль, который удается каждый раз, когда вызов Enter на веб-сайт, поэтому я могу войти в систему доступа URL, IP-адрес пользователя и т. Д. ..., Но теперь, кажется, я не могу сделать это больше в IIS7. Есть ли обходные пути? (кроме переключателя на «классический режим»).

Alt Text http://userserve-ak.last.fm/serv/126/24432467.jpg.

Ваше здоровье.

Это было полезно?

Решение

Когда ты это делаешь? это в мероприятии модуля? Он должен быть совершенно выполнен в комплексном бассейне. Нижняя строка есть изменения на том, как ASP.NET крючки к IIS при запуске в интегрированном режиме, который делает его «более первым классом». Это означает, что некоторые события огонь перед, например Application_Start, теперь пожаруют за пределы контекста фактического запроса. Другими примерами ожидают, что у вас есть аутентифицированная идентичность Windows, поскольку сейчас BeingRequest происходит еще до того, как IIS аутентифицируется, что это не было в прошлом.

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

Вы должны иметь возможность захватить запрос в любые уведомления, которые являются запросами, такие как BeadRequest, EndRequest, postauthorizerequest и т. Д. Кроме того, я бы порекомендовал против использования httpContext.Current, поскольку это взыскает дополнительный поиск в хэш-таблице и обычно можно Получите контекст непосредственно другими способами, специально в контексте модуля, поэтому, например, если вы обрабатываете BeginRequest, вы должны быть в состоянии сделать:

    HttpApplication application = (HttpApplication)sender;  
    HttpContext context = application.Context;  

И вы сохраните поиск.

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

Другие советы

Я написал это изначально как комментарий, потому что это не совсем ответ, но потом я увидел, что вы ищете «работать вокруг», поэтому вот моя идея о работе.

/App_code/basepage.vb.

 Public Class BasePage : Inherits System.Web.UI.Page
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ''# Do all your logging here
    End Sub
 End Class

/Default.aspx.vb.

Partial Class _Default : Inherits BasePage
    ''# This is simply your code behind for each page (notice it inherits BasePage)
    ''# You can still have your Page_Load events along with custom methods in here, 
    ''# and it will not affect the logging portion of your app.
End Class

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top