【问题标题】:"This type of page is not served." error when trying to browse on *.cshtml files“不提供此类页面。”尝试浏览 *.cshtml 文件时出错
【发布时间】:2012-10-17 13:00:52
【问题描述】:

我刚刚创建了一个新的 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 并确保它是 拼写正确。

请求的网址:/index.cshtml

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

更新

直接访问 .cshtml 文件并非用于生产代码 - 仅用于培训目的,! 导航到/Home/Index 工作得很好。所以没有别的,这显然是错误的。直接访问 .cshtml 文件即可。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    更新 2:

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

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

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

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

    原创

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

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

    public class HomeController: Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }
    

    然后使用您的问题中显示的内容定义了~/Views/Home/Index.cshtml 视图。

    现在,当您运行应用程序时,您可以导航到 /Home/Index,这将执行 Home 控制器的 Index 操作并呈现相应的视图。

    我建议您阅读一些关于 ASP.NET MVC 的入门教程,以熟悉最基本的基本概念。


    更新 1:

    阻止对~/Views 文件夹内的.cshtml 文件的请求的代码位于~/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>
    

    【讨论】:

    • 正确的陈述,但它并没有真正解决问题。这就像看总统辩论!
    • @Mikeb,这怎么不能解决问题?
    • OP 想知道配置信息在服务器中的什么位置,该服务器创建了他在一台机器而不是另一台机器上观察到的这个错误。是的,他不应该提供 cshtml,但在一台机器上他可以(或现在)而在另一台机器上他不能 - 那么是什么导致了这种差异?
    • @Mikeb - 最好的答案是解决 OP 应该 提出但不知道的问题......换句话说,解决背后的基本误解这个问题通常比直接解决问题更有用。
    • 感谢您提供非常详细的回答。但在这种情况下,我不想遵循任何最佳实践。目前,我在 Pluralsight 观看了一个视频系列,其中介绍了如何设置 单页应用程序。我对 MVC 很陌生,所以我真的用小测试项目进行了很多测试。这对我不起作用。我只想测试我的代码,如视频中所示,我想找到并解决这个问题 - 主要是出于兴趣。很抱歉没有在我之前的帖子中提到这一点。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 不应将问题作为答案发布。您可以点击 按钮提出新问题并参考这篇文章。
      • 对不起..这是关于我如何处理此错误的答案。这不是一个问题。
      • 嗨,很抱歉,我不知道为什么我在这里粘贴了我的“不是答案”评论。显然,这是一个答案。
      【解决方案4】:

      我在一个 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);
                  }
      

      这为我解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-06
        • 2012-08-05
        • 1970-01-01
        • 2017-03-02
        • 1970-01-01
        • 2014-09-08
        相关资源
        最近更新 更多