当我在我的默认IIS中托管我的Asp.Net MVC时,它既不显示.cshtml文件,也不显示Views文件夹。即使在目录浏览时,这些文件夹也会丢失。如果我在Views文件夹中创建了一些文件,我也无法访问它。如果我在另一个文件夹中创建一些文件,我可以访问它。
我认为这应该是一个相当基本的设置问题。我是否必须手动添加MVC支持? 我的IIS基于windowsservercore在我的docker容器中运行。设置如下:
FROM microsoft/windowsservercore
SHELL ["powershell"]
RUN Install-WindowsFeature NET-Framework-45-ASPNET ; \
Install-WindowsFeature Web-Asp-Net45
答案 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}}将被渲染。