2012-01-20 5 views
5

Utworzono prosty moduł HttpModule, który usuwa białe znaki z odpowiedzi przed wysłaniem jej do klienta. Działa to dobrze dla strony aspx w IIS7.0, ale jeśli utworzę statyczną stronę html i wywołaję ją, HttpModule nie działa (tak jak wiem, ponieważ źródło zawiera białe spacje, które w przeciwnym razie powinny zostać usunięte). Najwyraźniej jest coś, co nie robię dobrze, ale nie wiem co.Jak sprawić, by statyczna strona HTML przechodziła przez HttpModule w IIS7.0?

Moja strona internetowa znajduje się w puli aplikacji z .NET 4.0 i ManagedPipelineMode = Integrated.

Dodałem mój moduł jako ManagedModule i odnosi się do zestawu z silną nazwą z GAC.

dzięki

Edit- tutaj jest częścią system.webServer z web.config

<system.webServer> 
    ... 
    <modules runAllManagedModulesForAllRequests="true"> 
    <add name="RemoveWhitespaceHttpModule" 
     type="HttpModules.Modules.RemoveWhitespaceHttpModule, HttpModules, 
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=8a83u4bi47o9fo0d" 
      preCondition="" /> 
    </modules> 
    <defaultDocument> 
    <files> 
     <add value="TestForm.aspx" /> 
    </files> 
    </defaultDocument> 
</system.webServer> 

Edit- naprawił. Dla wszystkich zainteresowanych, to jak mój moduł sprawdza odpowiedź i wtedy zdecyduje, czy należy kontynuować usuwanie spacji lub nie

if (contentType.Equals("text/html") 
    && httpContext.Response.StatusCode == 200 
    && httpContext.CurrentHandler != null) 
{ ... } 

Problem był z trzecim warunkiem powyżej httpContext.CurrentHandler! = Null. podczas wywoływania tego modułu dla statycznych stron .html, currentHandler miał wartość zerową, a zatem kod nigdy nie wszedł do środka, aby manipulować html. usunąłem ten trzeci warunek i działa teraz. dzięki za twoje odpowiedzi każdy

+0

zmień nazwę statycznej strony .html na .aspx (bez zmiany potrzebnej zawartości) i sprawa powinna zadziałać – Alex

+0

GZIP już to robi http://stackoverflow.com/questions/702124/enable-iis7-gzip – jrummell

+0

@alex - to nie jest to, co chcę osiągnąć. mógłbym to łatwo zrobić i nie podnosić w ogóle tego pytania. Chcę móc korzystać z tego httpmodule nie tylko dla aplikacji asp.net, ale także dla zimnych fuzji. moim celem jest sprawienie, by działało na strony .html i zabrało je stamtąd. –

Odpowiedz

3

To powinno wystarczyć, w pliku web.config.

<modules runAllManagedModulesForAllRequests="true"></modules> 

Jest to szybkie i łatwe rozwiązanie, ale może powodować problemy/problemy z wydajnością.

+0

próbowałem już tego, nie działa. –

+0

Czy Twój moduł jest zarejestrowany w system.webserver> modules? w przeciwnym razie nie zostanie odebrany. a jeśli tak, to wyślij część web.config – ScottE

+0

tak ... dodano część system.webserver z mojego web.config w pytaniu głównym –

1

Musisz spojrzeć na Mapowanie obsługi w swoim IIS.

Sposób działania programu obsługi polega na tym, że program obsługi IIS jest zarejestrowany i ma obsłużyć stronę typu danych szczegółowych. Możesz spojrzeć na "Mapowania Handler'a" w IIS [W poleceniu uruchomienia wpisz inetmgr i naciśnij enter. IIS Menedżer pojawi się i szukać Handler Mappings w sekcji IIS]

+0

co konkretnie radziłbyś mi skonfigurować? Próbowałem już dodać mapowanie obsługi, z * .html, ale to nie służyło żadnemu celowi. –

+3

Zapytał o HttpModule, a nie HttpHandler – brushleaf

+0

@ brushleaf: Thanks. Poprawiono mnie. – Kangkan

Powiązane problemy