One annoyance that some developers have run into with ASP.NET MVC is that certain reserved filenames are not allowed in URLs. Often, this is manifested as a Bad Request error or a File Not Found (404) error.
The specifics of this restriction are accounted for in an interesting blog post entitled Zombie Operating Systems and ASP.NET MVC. This actually wasn’t a restriction on ASP.NET MVC but was built into the core of ASP.NET itself.
Fortunately, ASP.NET 4 fixes this issue with a new setting. In web.config, simply add
<httpRuntime relaxedUrlToFileSystemMapping="true"/> to the system.web node. Here’s a snippet from my web.config.
<!-- ... your other settings ... -->
Here is a screenshot of it working on my machine.
Now you are free to use
COM1-9, LPT1-9, AUX, PRT, NUL, CON in your URLs. I know you were dying to do so. :)
So the question comes up from time to time, “what if I want to have
web.config in my URL?” Why would you want that? Well if you are StackOverflow.com, this makes sense because of the tagging system which places a tag (such as the “web.config” tag, into the URL. I’m not sure why anyone else would want it. ;)
The answer is yes, it works.
Please note, that you still can’t request
/web.config because that would try to request
web.config in the root of your web application and ASP.NET won’t allow that for good reason!
In fact, any request for a *.config file that doesn’t match a route will fail.
While I think the vast majority of developers really won’t encounter this issue, it’s a really improvement included in ASP.NET 4 for those that do care.
Keep in mind that this isn’t restricted to just these special names. For example, a URL segment ending with a dot such as the following URL
http://example.com/version/1.0./something will not work unless you set the this web.config value.