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
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.
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.
精彩评论