我有标准的ASP.NET 4应用程序。在此应用程序内部,还有一些剃刀(例如test.cshtml
)文件。但是,如果我将浏览器指向/test
文件(没有扩展名),则ASP.NET应用程序可以正常工作。 IIS(静态文件处理程序)返回404。
相同的应用程序甚至独立的.cshtml
文件都在本地计算机(使用IIS7.5 / Win7)和服务器(IIS7.5 / Win2008R2)上运行,但它不能用于IIS7的服务器0.0 /的Win2008。
MVC3安装在两台机器上,两台机器上的应用程序池都集成了.NET 4.0。
.cshtml
处理程序的工作原理如何?当IIS决定使用静态文件处理程序和.cshtml
处理程序时?我还应该检查什么?
编辑:
澄清 - 我实际上并没有使用整个MVC框架,它就像普通的.ASPX或PHP文件。没有控制器,没有路线,没有“观点”。除了旧的ASP.NET应用程序之外,我将它用于一个简单的脚本。
我认为这不是编程问题,因为它适用于本地计算机,而是配置问题 - Win2008服务器上的IIS可能未正确配置。
的 EDIT2: 的
(IIS7.5运行的机器,只有IIS7.0的机器不起作用。但我不确定它是否是IIS版本的问题。)
的 EDIT3: 的
在我工作的本地计算机上,我没有设置任何路由。 TheCodeKing和Keith建议我需要在某个地方进行路由。也许是的,但它不在我的申请中。默认情况下,它可能在IIS配置中的某个位置设置。
您是否有任何提示可以找到这种“隐含”路由?
的 EDIT4: 的
注意:在HttpForbiddenHandler
的所有计算机上都有*.cshtml
,因为您无法下载cshtml文件。 TransferRequestHandler
还有*.
。 (两者都已启用。)
的 EDIT5: 的
我发现在服务器上工作的地方,我需要在web根目录中有任何.cshtml
文件。如果我从Web根目录中删除.cshtml
并尝试从子目录中调用任何内容,则它将无效。
的 EDIT6: 的
我在另外两台机器上尝试过这种机器:一台机器人IIS 7.5
,另一台机器人IIS 7.0
。在IIS 7.5
它可以工作(普通安装没有配置),但在IIS 7.0
它不起作用。
如何使其在IIS 7.0上运行?
答案 0 :(得分:6)
耶!经过几天的挣扎,我找到了它!:))
使其在 IIS 7.0 上运行的一种方法是启用runAllManagedModulesForAllRequests
:
<modules runAllManagedModulesForAllRequests="true" />
(虽然,在 IIS 7.5 上,即使使用默认值runAllManagedModulesForAllRequests="false"
也能正常工作。)
不要问我为什么:)也许有人可以解释一下。
答案 1 :(得分:5)
不确定这是否是您的特殊问题,但听起来好像ASP.NET网页没有运行(MVC 3及更高版本依赖于Razor和其他东西的网页)。有时,事情可能会被安装在破坏ASP.NET和IIS的某些配置的订单中,这反过来又会使Web页面无法运行,并且不会执行任何cshtml文件。
尝试运行 aspnet_regiis / i 来清理它们。
答案 2 :(得分:1)
IIS7.0上有一个修补程序:http://support.microsoft.com/kb/980368
我今天在Windows 2008 SP2上安装了它(需要重新启动操作系统)。 IIS 7.0中的行为现在与IIS 7.5相似
它解决了我身边的问题/没有强迫:
<modules runAllManagedModulesForAllRequests="true" />
这比为任何请求运行所有模块(甚至在css / images / ...上)更好,这会导致不必要的过载。
答案 3 :(得分:0)
您确定IIS有足够的权限来访问/ test目录下的文件吗?
这可能会导致我发现一些愚蠢的问题。
答案 4 :(得分:0)
如果这是一个asp.net 4.0 Web应用程序,您需要手动设置路由,创建适当的控制器,并确保您的视图(.cshtml文件)实际存在于/ Views / ControllerName中文件夹中。
我还建议您设置项目以在开发环境中使用IISExpress来更紧密地匹配您的Web服务器。调试这些问题时,这是一个很好的帮助。
答案 5 :(得分:0)
由于您没有使用MVC,您需要设置路由或使用IIS重写模块重写以期望/test
解析为/test.cshtml
。没有它你就不会得到这种行为。
e.g。你的应用程序开始就是这样的。
routes.MapPageRoute(
"extension-less paths",
"{view}",
"~/{view}.cshtml"
);
答案 6 :(得分:0)
cshtml可以工作。
您可以认为它是一个HTML,但是使用剃刀语法。