Take the 2-minute tour ×

I'm messing about with controller organisation and I've hit a problem.

If I have the following physical structure


and I request the URI:


I get a 403 Directory Listing Denied :(

(im using a custom IControllerFactory and IViewEngine to look in this non-default path)

Why is this happening? (I know the 403 is because its hitting the /Home folder, but why is it hitting the folder?)

Why doesn't the UrlRoutingModule rewrite the route and let the controller pick up the request?

Application_BeginRequest fires, but then it seems to pass control back to IIS to try and serve from the filesystem.

Is it the UrlRoutingModule that defaults to a physical path if it exists before rewriting?

Is there a way to make this work?

N.B. Please don't suggest relocating my controllers etc. I know this is an obvious option, but that isn't the question ;)

Using IIS7 In Integrated Mode


share|improve this question
add comment

2 Answers

up vote 3 down vote accepted

Because the routing abstraction will only route a request that has no equivalent file on disk.

You have no other option but to rename your folder structure.

-- Edit No, actually you can disable that "feature" by setting the RouteExistingFiles property on RouteCollection.

share|improve this answer
meh :( ok thanks –  Andrew Bullock May 20 '10 at 12:44
add comment

The routing module does, indeed, have a preference for real files if they exist. It seems that it must also not reroute after a failed accessibility check.

You do get the point that having separate controller/views reinforces the separation of concerns central to an MVC architecture, right? I'd be concerned that keeping controllers/views in the same folder might confuse things for later developers.

share|improve this answer
hmm do you know where this "preference" code lives? i went on a reflector safari but a lion eated me :( –  Andrew Bullock May 20 '10 at 12:46
System.Web.Routing.RouteCollection.GetRouteData(HttpContextBase) –  serialseb May 20 '10 at 14:35
add comment

Your Answer


