“这种类型的页面不会被提供。”尝试浏览* .cshtml文件时出错

时间:2012-10-17 13:00:52

标签: c# asp.net-mvc

我只是创建一个新的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文件。

4 个答案:

答案 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);
            }

这解决了我。