Используя пользовательский httpmodule и иметь 'Sys' неопределенных ошибок - PullRequest
0 голосов
/ 14 января 2010

Я создал свой собственный httpmodule для обработки перезаписи URL, поэтому URL, такие как www.contoso.com/help/default.aspx, будут указывать на www.contoso.com/default.aspx, где находится реальный ресурс.

Это работает нормально, но из-за моей реализации модуля http у меня возникают проблемы с тем, что 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 голосов
/ 22 октября 2010

Попробуйте добавить что-то вроде этого в ваш собственный 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));
    }
}
...