我创建了自己的自定义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>
答案 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));
}
}