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

Mic*_*ing 39 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>
Run Code Online (Sandbox Code Playgroud)

打开URL时,将显示以下错误:

'/'应用程序中的服务器错误.

此类页面不会提供.

描述:未提供您请求的页面类型,因为它已被明确禁止.扩展名".cshtml"可能不正确.请查看下面的网址,确保拼写正确.

请求的URL:/index.cshtml

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

UPDATE

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

Dar*_*rov 59

更新2:

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

在ASP.NET MVC 4中,默认情况下禁用此选项.要启用它,您只需在web.config中调整以下设置:

<add key="webpages:Enabled" value="true" />
Run Code Online (Sandbox Code Playgroud)

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

原版的

您不应直接请求.cshtmlASP.NET MVC应用程序中的文件.这些是位于~/Views文件夹中的视图.它们无法直接访问.您需要相应的控制器操作.

例如,假设您有以下控制器:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后~/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>
Run Code Online (Sandbox Code Playgroud)

  • @Mikeb,这怎么不解决这个问题? (2认同)
  • 谢谢你这个非常详细的答案.但在这种情况下,我不想遵循任何最佳做法.目前我在Pluralsight观看视频系列,其中介绍了如何设置*单页应用*.我对MVC很新,所以我真的用很少的测试项目测试了很多.这对我来说不起作用.我只想测试我的代码,如视频中所示,我想找到并解决这个问题 - 主要是为了感兴趣.很抱歉在我之前的帖子中没有提到这一点. (2认同)