Http Handler没有拦截.html和.aspx

时间:2016-12-09 12:21:39

标签: c# asp.net angularjs httphandler

我有SPA使用角度(路由也是角度)。我写了http处理程序,它将拦截旧网址并重定向到新网址。

当我将路径视为*击中但* .html没有击中我的处理程序时。 请找代码剪辑。

我的处理程序代码 -

public class PageHandler : IHttpHandler
    {
     public void ProcessRequest(HttpContext context)
        {
            HttpRequest request = context.Request;
            HttpResponse response = context.Response;
            string newUrl=string.Empty;
            if (Convert.ToString(request.Path) != null)
                 newUrl = GetNewURL(Convert.ToString(request.Path));
            if (newUrl != string.Empty)
                response.Redirect(newUrl);
            else
                response.Redirect("/404");
        }
}

Webconfig设置 -

 <handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <remove name="OPTIONSVerbHandler" />
            <remove name="TRACEVerbHandler" />
          <add verb="*" path="*.html,*.aspx" name="myHandler" type="LucidFox.Helpers.PageHandler"/>
 </handlers>

不确定为什么它不会拦截.aspx和.html

1 个答案:

答案 0 :(得分:1)

IIS 7's handler mapping is different than IIS 6's handler mapping. In IIS 6, you can map your handlers like this in web.config.It allows you to use multiple paths, comma-delimited.

<handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <remove name="OPTIONSVerbHandler" />
            <remove name="TRACEVerbHandler" />
          <add verb="*" path="*.html,*.aspx" name="myHandler" type="LucidFox.Helpers.PageHandler"/>
 </handlers>

In IIS 7, it's in a different section.It doesn't support multiple paths, so you need to map your handler for each path.

  <handlers>
   <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
   <remove name="OPTIONSVerbHandler" />
   <remove name="TRACEVerbHandler" />
   <add verb="*" path="*.html" name="myHandler" type="LucidFox.Helpers.PageHandler"/>
   <add verb="*" path="*.aspx" name="myHandler" type="LucidFox.Helpers.PageHandler"/>
 </handlers>