Windows 2008 IIS7环境下无法运行.cshtml页面求助
搞定Razor v2页面在IIS7上无法解析的问题
嘿,我之前也碰到过一模一样的情况!你猜的完全没错——就是因为.cshtml文件没有对应的处理程序映射,IIS根本不知道该用哪个模块去解析Razor代码,只能把源码直接扔给浏览器了。下面是一步步的配置方法,跟着做就行:
第一步:打开IIS管理器,定位到你的网站
- 打开Internet信息服务(IIS)管理器,找到你发布的目标网站并点击进入。
- 在右侧的“功能视图”里,找到处理程序映射,双击打开它。
第二步:添加.cshtml的模块映射
- 在处理程序映射页面的右侧“操作”栏,点击添加模块映射。
- 在弹出的窗口里,按以下信息填写:
- 请求路径:直接填
*.cshtml - 模块:选择
ManagedPipelineHandler(这是托管代码的核心处理模块) - 可执行文件:留空即可,无需填写
- 名称:随便起个好记的,比如
Razor v2 处理cshtml文件
- 请求路径:直接填
- 点击窗口里的请求限制按钮,在“映射”选项卡下勾选“文件”,确保只有实际存在的.cshtml文件才会被处理,避免不必要的请求触发。
- 点击确定时,会弹出是否创建FastCGI应用的提示,直接选否就行。
第三步:确认ASP.NET 4.0已正确注册到IIS
有时候哪怕应用池选了.NET 4.0,IIS也可能没把ASP.NET 4.0的组件注册到位。用管理员权限打开命令提示符,运行这条命令:
%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
这个命令会重新将ASP.NET 4.0注册到IIS,确保所有托管模块都能被识别。
第四步:检查应用池的关键设置
- 回到你的网站,右键点击应用程序池,找到对应的.NET 4.0池,选择“高级设置”。
- 确认“托管管道模式”是集成(别选经典模式,Razor在集成模式下才能正常工作)。
- 另外,“标识”项默认用
ApplicationPoolIdentity就足够,要是遇到权限问题,可以改成NetworkService试试。
额外小检查:Web.config配置
要是上面几步做完还是不行,去看看网站根目录的Web.config,确保包含Razor相关的配置节:
<system.web> <compilation debug="false" targetFramework="4.0"> <assemblies> <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add assembly="System.Web.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> </assemblies> </compilation> </system.web> <system.webServer> <handlers> <add name="cshtml" path="*.cshtml" verb="*" type="System.Web.WebPages.HttpHandler, System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" resourceType="File" requireAccess="Script"/> </handlers> </system.webServer>
要是没有这些内容,手动加进去就行,注意版本号是2.0.0.0,对应你用的Razor v2。
最后重启一下网站和应用池,应该就能正常解析Razor代码了!
内容的提问来源于stack exchange,提问作者Soren
相关产品推荐
相关产品推荐

