使用自定义httpmodule并具有'Sys'是未定义的错误

时间:2010-01-14 16:17:37

标签: httpmodule scriptresource.axd

我创建了自己的自定义httpmodule来处理网址重写,以便像www.contoso.com/help/default.aspx这样的网址指向实际资源所在的www.contoso.com/default.aspx

这很好用,但是由于我实现了一个httpmodule,我遇到了ScriptResource.axd无法正常运行以添加执行按钮点击所需的javascript或者ajax提供的功能的问题。

我已将IIS7设置为使用经典管道应用程序池。我还确保web.config文件中包含必要的信息。

我在下面粘贴了这些信息。有人可以识别我错过的或应该配置不同的东西吗?

<httpHandlers>
            <remove verb="*" path="*.asmx" />
                <remove  path="WebResource.axd" verb="GET" />
            <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
      <add verb="*" path="*.aspx" type="myHandler" />
      <add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
        </httpHandlers>
        <httpModules>
            <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
      <add name="myModule" type="myModule" />
        </httpModules>

1 个答案:

答案 0 :(得分:0)

尝试将这样的内容添加到自定义httpmodule:

public class MyModule : IHttpModule
{
    public MyModule()
    {
    }

    private void Application_OnAfterProcess(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;

        if (context.Request.Headers["x-microsoftajax"] == null)
        {
            if ((!System.IO.File.Exists(application.Request.PhysicalPath)) &&
                (!application.Request.Url.ToString().Contains(".axd")) &&
                (!application.Request.Url.ToString().Contains(".asmx")))
                {
                    string newUrl = "~/Search.aspx?q=" 
                        + context.Server.UrlEncode(application.Request.Url.Segments.Last());
                        ...
                    context.RewritePath(newUrl);
                }
            }
        }
    }

    void IHttpModule.Init(HttpApplication context)
    {    
         context.PostResolveRequestCache += (new EventHandler(this.Application_OnAfterProcess));
    }
}