ASP.NET HttpModule, странное поведение при использовании Response.Write в текущий контекст - PullRequest
1 голос
/ 28 октября 2010

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

Похоже, что всякий раз, когда я тестирую Запрос, а затем выполняю Ответ, выходные данные не записываются в поток!

Я подключил отладчик (VS 2008) к модулю, и все 3 оператора Response.Write, приведенные ниже, выполняются, но на самом деле на странице выводятся только два внешних оператора.Я пропустил понимание ключа или предостережение?

Спасибо за любую помощь.

Среда обработки: ASP.NET 3.5 / WinXP / IIS 5

с использованием System;using System.Collections.Generic;использование System.Web;используя System.Text;использование System.Web.UI;

public class Interceptor : IHttpModule
{
    #region IHttpModule Members

    public void Dispose() { }

    public void Init(HttpApplication context)
    {
        context.EndRequest += new EventHandler(TestHandler);
    }

    private void TestHandler(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        HttpContext ctx = app.Context;

        if (1 == 1)
        {
            ctx.Response.Write("Hello, 2"); // Works, as expected
        }

        string test = ctx.Request.Url.ToString();
        if (test.Contains("/images")) {
            ctx.Response.Write("Hello, never written"); // This code executes when the test passes, but nothing is ever written...
        }

        ctx.Response.Write("Hello"); // Works

    }

    #endregion
}

Ответы [ 3 ]

2 голосов
/ 28 октября 2010

Если вы запрашиваете изображение, поток ответа тоже будет другим!

0 голосов
/ 28 октября 2010

К сожалению, ответ был глупостью с моей стороны. Одна из тех классических вещей, которые упускают из виду!

Запрос, содержащий / image, также оказался для двоичного файла. Поэтому Ответ был записан в поток для этого, а не для Страницы.

0 голосов
/ 28 октября 2010

Вы уверены, что точка останова на этой линии достигнута для запроса, который вы отслеживаете? Имейте в виду, что если у вас есть изображение в этой папке / images и страница .aspx, содержащая это изображение, ваш модуль будет вызываться дважды на сервере разработки (для aspx и изображения) и только один раз в IIS по умолчанию (только для файла ASPX). Когда у вас есть одновременные запросы к модулю, иногда трудно понять, какая точка останова на каком запросе.

...