开发者

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


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜