Andrew Bullock
Andrew Bullock

Reputation: 37436

asp.net mvc route clashing with physical path in IIS7

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

If I have the following physical structure

/Home/HomeController.cs
/Home/Index.aspx
/Home/About.aspx

and I request the URI:

/Home/Index

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

Thanks

Upvotes: 3

Views: 1439

Answers (2)

SerialSeb
SerialSeb

Reputation: 6766

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.

Upvotes: 4

tvanfosson
tvanfosson

Reputation: 532755

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.

Upvotes: 1

Related Questions