httpModules不能在iis7上运行

时间:2010-05-29 14:14:35

标签: c# asp.net asp.net-2.0 httphandler httpmodule

我有以下模块

public class LowerCaseRequest : IHttpModule {
     public void Init(HttpApplication context) {
         context.BeginRequest += new EventHandler(this.OnBeginRequest);
     }

     public void Dispose() { }

     public void OnBeginRequest(Object s, EventArgs e) {
         HttpApplication app = (HttpApplication)s;

         if (app.Context.Request.Url.ToString().ToLower().EndsWith(".aspx")) {
             if (app.Context.Request.Url.ToString() != app.Context.Request.Url.ToString().ToLower()) {
                 HttpResponse response = app.Context.Response;

                 response.StatusCode = (int)HttpStatusCode.MovedPermanently;
                 response.Status = "301 Moved Permanently";
                 response.RedirectLocation = app.Context.Request.Url.ToString().ToLower();
                 response.SuppressContent = true;
                 response.End();
             }
             if (!app.Context.Request.Url.ToString().StartsWith(@"http://zeeprico.com")) {
                 HttpResponse response = app.Context.Response;

                 response.StatusCode = (int)HttpStatusCode.MovedPermanently;
                 response.Status = "301 Moved Permanently";
                 response.RedirectLocation = app.Context.Request.Url.ToString().ToLower().Replace(@"http://zeeprico.com", @"http://www.zeeprico.com");
                 response.SuppressContent = true;
                 response.End();
             }
         }
     }
}

web.config看起来像

<system.web>
  <httpModules>
      <remove name="WindowsAuthentication" />
      <remove name="PassportAuthentication" />
      <remove name="AnonymousIdentification" />
      <remove name="UrlAuthorization" />
      <remove name="FileAuthorization" />
      <add name="LowerCaseRequest" type="LowerCaseRequest" />
      <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" />
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
</system.web>

它在我的运行XP和IIS 5.1的PC上工作

但是在运行IIS7和WS 2008的网络服务器上运行不起作用,请帮助我不知道如何解决这个问题。

由于

3 个答案:

答案 0 :(得分:37)

在IIS7及更高版本上使用

<configuration>
  <system.webServer>
    <modules>
      <add name="CustomModule" type="Samples.CustomModule" />
    </modules>
  </system.webServer>
</configuration>

答案 1 :(得分:0)

上述内容适用于IIS 7.5

<modules>
  <add name="CustomModule" type="Samples.CustomModule" />
</modules>

我遇到的唯一问题是应该将特定应用程序的应用程序池实例设置为托管Pipeline = Integrated,而不是Classic .. 要么: 使用经典模式

如果您的应用程序要使用经典模式,请确保为该类型的池配置了应用程序,并且您的模块在system.web部分中配置,而不是在web.config文件的system.webServer部分中配置。

答案 2 :(得分:-1)

在IIS中转到功能视图选择模块

双击模块,然后右键单击并按(添加管理模块)

然后按照web.config

中的定义输入名称和类型

示例:

<httpModules>
  <add name="CustomModule" type="WebApplication.Security.CustomModule" />
</httpModules>