环境: IIS 7.5,IIS 集成模式, VS 2012,Chrome.
用VS新建一个MVC4项目时,会在根目录下的web.config和view 目录下的web.config文件里自动添加<add key="webpages:Enabled" value="false" />这样一个节点。
这表示什么意思,从字面上很难看出来。于是google了一把。大概意思是说禁止你直接访问view目录下面的.cshtml和.vbhtml这样的文件(比如通过浏览器输入URL访问)。否则会给出“This type of page is not served.”这样的错误提示。于是开始试验,通过浏览器直接访问view里面的Index.cshtml文件。给出的错误提示却是“The resource cannot be found.”用Chrome打开网络监视是一个404的错误。
虽然结果都是不能直接访问文件,但现象和网上描述的完全不一样。于是在view目录下面添加一个html页面直接访问。给出的也是“The resource cannot be found.”这样的错误,于是猜想是不是MVC默认情况下直接禁止访问view目录下的文件。
这时候突然想到前段时间用HttpForbiddenHandler来处理直接访问一些文件,如Excel文件。给出的错误提示也是“The resource cannot be found”。于是猜想.cshtml是不是也被类似的handler给处理了,果然在view目录下面的web.config里面发现这样的节点:<handlers> <remove name="BlockViewHandler"/> <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> </handlers>(此配置是针对IIS 7.5集成模式的配置,另外一个类似的配置是针对的经典模式或者低版本的IIS)。注释掉该节点,直接浏览Index.cshtml,出现的错误提示果然是“This type of page is not served.”这是一个403的错误。