41

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

打开 URL 时显示以下错误:

“/”应用程序中的服务器错误。

不提供此类页面。

说明:您请求的页面类型未提供服务,因为它已被明确禁止。扩展名“.cshtml”可能不正确。请查看下面的 URL 并确保其拼写正确。

请求的 URL:/index.cshtml

我在我的一位同事的开发机器上测试了这个场景(完全相同的项目)。它按预期工作。所以我想配置或某些安装肯定有问题。但是在哪里搜索?本地 IIS 和 Visual Studio 开发服务器都不起作用。

更新

直接访问 .cshtml 文件不用于生产代码 -用于培训目的!导航到/Home/Index工作正常。所以没有别的,这显然是错误的。只需直接访问 .cshtml 文件。

4

4 回答 4

61

更新 2:

我终于明白了你想要达到的目标。对不起,我最初不理解。我没有仔细阅读你的问题。您正在尝试直接访问~/Views文件夹外的 Razor 页面。

在 ASP.NET MVC 4 中,默认情况下禁用此功能。为了启用它,您只需在 web.config 中调整以下设置:

<add key="webpages:Enabled" value="true" />

false当您使用任何模板创建新的 ASP.NET MVC 4 项目时,它的值默认为。因此,如果您说它可以在他的 PC 上运行,我猜您的同事已经这样做了。

原来的

您不应直接.cshtml在 ASP.NET MVC 应用程序中请求文件。这些是位于~/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>

于 2012-10-17T13:01:53.157 回答
1

如果您已启用网页并且您已验证 .NET 版本有效,那么您的问题很可能是 IIS 服务器没有可在所有站点之间共享的 razor 二进制文件。要修复它,您应该确保已将 mvc 二进制文件包含在 /bin 文件夹中。这个链接解释得很好: http:
//www.codeproject.com/Answers/437259/his-type-of-page-is-not-served-CSHTML-how-to-serve#answer1

于 2016-10-24T20:49:55.860 回答
1

我遇到了同样的问题,我通过转到客户端的属性并显示“开始操作”的地方解决了它,选择当前页面。我将其设置为特定页面。

于 2017-05-23T23:12:00.433 回答
-1

我在一个 MVC 项目中收到了同样的消息,结果发现我缺少 MVC 框架的一个关键部分,即 Global.asax 和 Global.asax.cs 条目。我在解决方案资源管理器中选择了该项目并执行了添加、新项、全局应用程序类。然后我对其进行了编辑并将 Application_Start 替换为必要的配置项:

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
            }

这为我解决了。

于 2018-05-23T20:23:14.047 回答