If I have a standard AXD HttpHandler and the default ignore route for *.axd, then why is ASP.NET MVC still handling requests in subdirs, for instance if there is a request made for **/Content/Css/**css.axd?d.... If the request is made at root /css.axd?d.... everything works fine.
Asked
Active
Viewed 2,907 times
3
-
You might want to post your route, could be a problem with how you are defining it. – Wyatt Barnett Nov 03 '09 at 14:20
-
this is the default ignore route: routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); – mare Nov 03 '09 at 15:09
1 Answers
6
I guess the route was deliberately made like that by design, maybe because the wildcard at a start of string isn't as performant.
Unfortunately this won't work:
routes.IgnoreRoute("{ *pathAndResource }.axd/{ *pathInfo }")
The solution is to use constraints - see Phil Haack's blog post
Phil's blogs uses a regular expression constraint, but you could create you own custom contraint alternatively to make things more readable:
routes.IgnoreRoute("match axds"
"{*url}", new { controller = "MyController", action = "MyAction" }, new
{
myCustomConstraint = new FileExtensionConstraint(".axd")
}

LondonBasedEngineer
- 665
- 5
- 10
-
Why is that default IgnoreRoute there then? In every new ASP.NET MVC projects created... – mare Nov 04 '09 at 11:10
-
1The default ignore route is needed to support asp.net 2.0's built-in web resources which are always found at: /webresource.axd see: http://support.microsoft.com/kb/910442. – LondonBasedEngineer Nov 06 '09 at 09:51