IIS中的主机Asp.Net MVC隐藏了Views-Folders和.cshtml

时间:2018-01-23 17:16:07

标签: asp.net asp.net-mvc iis

当我在我的默认IIS中托管我的Asp.Net MVC时,它既不显示.cshtml文件,也不显示Views文件夹。即使在目录浏览时,这些文件夹也会丢失。如果我在Views文件夹中创建了一些文件,我也无法访问它。如果我在另一个文件夹中创建一些文件,我可以访问它。 enter image description here

这是我的路由配置 enter image description here

我认为这应该是一个相当基本的设置问题。我是否必须手动添加MVC支持? 我的IIS基于windowsservercore在我的docker容器中运行。设置如下:

FROM microsoft/windowsservercore
SHELL ["powershell"]
RUN Install-WindowsFeature NET-Framework-45-ASPNET ; \  
    Install-WindowsFeature Web-Asp-Net45

1 个答案:

答案 0 :(得分:1)

路由不会转到视图它会转到控制器。它是处理然后渲染视图的控制器。此外,您提供的网址与视图位置之间存在无物理关联 - 这完全取决于路由的设置方式。

IIS阻止直接访问Views文件夹是正常和预期的行为,因为浏览器从不直接使用这些文件。

默认情况下,视图是基于约定的。他们使用的约定是Views\<ControllerName>\<ActionName>.cshtml。当视图位于正确的相应位置时,操作方法可以只是return View();,并且视图将被渲染。

如果您已将视图的虚拟位置传递给Views\tst.cshtml方法(例如View),则视图return View("~/Views/tst.cshtml");呈现。是因为它与任何“正常”的MVC约定都不匹配。

由于您没有提供任何控制器或操作名称的示例(或者即使您有任何名称),我将提供MVC模板项目的基本示例。

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

    public ActionResult About()
    {
        ViewBag.Message = "Your application description page.";

        return View();
    }

    public ActionResult Contact()
    {
        ViewBag.Message = "Your contact page.";

        return View();
    }
}

使用上述控制器和Default路由,如果您传递URL /Home/About(Home匹配HomeController,以及About匹配About方法),将运行About方法,以及{ {1}}将被渲染。

参考:Understanding Models, Views, and Controllers (C#)