I have a custom HTTP Handler that properly implements IHttpHandler. Below is what I've configured in my webConfig. If I understand correctly this block should capture any requests with .test as the extension.
<handlers>
<add name="SampleHandler" verb="*" path="*.test"
type="TestApp.App_Start.CustomHandler, TestApp" />
</handlers>
However, the only time this handler is ever invoked is when I have a path depth of three applied to the request URL. All other requests will 404.
For instance the handler works correctly when the path is:
localhost:XXX\some\fake\path\file.test
But not for:
localhost:XXX\some\file.test
I am using ASP.NET MVC 5, and suspect it has something to do with the routing. I also am using the sample project provided in VS2013 so besides a handler being added to the project I really haven't done anything else.
Update:
I've determined the default route is interfering.
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Is there way to get it working even with this route configured?
It looks like the routing was interfering with the handler. In order to allow the handler to recieve the request I needed to call IgnoreRoute method against the current RouteCollection ignoring any routes with .test in them:
Inside the RouteConfig class
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.IgnoreRoute("{resource}.test/");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
It works now. Is there a better way to do this?