我只是创建一个新的MVC 4 Web API项目,并创建一个新的.cshtml文件,其中包含非常简单的HTML:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title></title>
</head>
<body>
<div>
</div>
</body>
</html>
打开网址时,会显示以下错误:
>应用程序中的服务器错误。此类网页未投放。
描述:未提供您请求的页面类型,因为 它被明确禁止。扩展名“.cshtml”可能是 不正确。请查看下面的网址,确保它是 拼写正确。
请求的网址:/index.cshtml
我在一位同事的开发机器上测试了这个场景(完全相同的项目)。它按预期工作。所以我想配置或某些安装肯定有问题。但哪里要搜索?本地IIS和Visual Studio开发服务器都不起作用。
更新
直接访问.cshtml文件不适用于生产代码 - 它仅用于培训目的,仅!
导航到/Home/Index
完全正常。所以没有别的,这显然是错的。只是直接访问.cshtml文件。
答案 0 :(得分:58)
更新2:
我终于明白了你想要实现的目标。对不起我最初不理解。我没有仔细阅读你的问题。您正试图直接访问~/Views
文件夹之外的Razor页面。
在ASP.NET MVC 4中,默认情况下禁用此选项。要启用它,您只需在web.config中调整以下设置:
<add key="webpages:Enabled" value="true" />
使用任何模板创建新的ASP.NET MVC 4项目时,默认值为false
。所以我猜你的同事已经这样做了,如果你说它可以在他的电脑上运行。
<击> 的 ORIGINAL 强> 撞击>
<击>您不应直接在ASP.NET MVC应用程序中请求.cshtml
文件。这些是位于~/Views
文件夹中的视图。它们无法直接访问。您需要相应的控制器操作。
例如,假设你有以下控制器:
public class HomeController: Controller
{
public ActionResult Index()
{
return View();
}
}
然后使用您问题中显示的内容定义了~/Views/Home/Index.cshtml
视图。
现在,当您运行应用程序时,您可以导航到/Home/Index
,它将执行Index
控制器的Home
操作并呈现相应的视图。
我建议你阅读一些关于ASP.NET MVC的入门教程,以便熟悉基本的最基本概念。
更新1:
阻止.cshtml
文件夹中~/Views
个文件的请求的代码位于~/Views/web.config
文件中:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
击> 答案 1 :(得分:1)
如果您已启用网页并且您已验证.NET版本有效,那么您的问题很可能是IIS服务器没有可用于在所有站点之间共享的剃刀二进制文件。要解决此问题,您应确保已将/ mvc二进制文件包含在/ bin文件夹中。这个链接解释得非常好:
http://www.codeproject.com/Answers/437259/his-type-of-page-is-not-served-CSHTML-how-to-serve#answer1
答案 2 :(得分:1)
我有同样的问题,我通过转到客户端的属性并在其中显示&#34;开始操作&#34;,选择当前页面来解决它。我把它设置为特定页面。
答案 3 :(得分:0)
我在MVC项目中有相同的消息,结果发现我错过了MVC框架的关键部分,Global.asax和Global.asax.cs条目。我在解决方案资源管理器中选择了该项目并执行了Add,New Item,Global Application Class。然后我编辑它并用必要的配置项替换Application_Start:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
这解决了我。