Asp.net mvc 3 MVC控制器名为控制器抛出;'中的服务器错误/';应用程序。”;
我正在使用ASP.NET MVC 3(Razor)并创建了一个名为“Controllers”的控制器,具体来说,控制器类名是“ControllersController” 以下是我的“控制器”控制器的一个片段:Asp.net mvc 3 MVC控制器名为控制器抛出;'中的服务器错误/';应用程序。”;,asp.net-mvc-3,controller,naming-conventions,Asp.net Mvc 3,Controller,Naming Conventions,我正在使用ASP.NET MVC 3(Razor)并创建了一个名为“Controllers”的控制器,具体来说,控制器类名是“ControllersController” 以下是我的“控制器”控制器的一个片段: public class ControllersController : Controller { public ActionResult Index() { return View(); } } 除了创建ControllersControlle
public class ControllersController : Controller
{
public ActionResult Index()
{
return View();
}
}
除了创建ControllersController类之外,我还创建了一个Razor视图(Index.cshtml),该视图与ControllersController Index()操作相关。值得注意的是,我通过右键单击控制器中的Index()方法并选择“添加视图”创建了Index.cshtml视图
我遇到的问题是,当浏览器尝试转到时,会引发以下错误:
“/”应用程序中出现服务器错误。
找不到资源。
描述:HTTP404。资源
您正在寻找(或其中一个)
依赖项)可以被删除,
它的名字改变了,或者
暂时不可用。请
查看以下URL并确保
它拼写正确
请求的URL:/控制器/
我想指出两点:
有了MVC中的所有命名约定,一个名为Controllers的控制器会导致一些奇怪的行为,我并不感到奇怪。我的问题是,;我需要做什么才能不必在浏览器的URL中指定/索引?这是因为在项目的磁盘上有一个名为“控制器”的文件夹。一种选择是将该文件夹重命名为其他文件夹。使用Visual Studio发布选项发布站点时,将不存在此问题,因为不会推送控制器文件夹。第二个更麻烦的解决方案是设置
routes.routeeExistingFiles=true在global.asax.cs的registerOutes
函数中的code>。然后,您可能需要为内容文件夹中的项目调用route.IgnoreRoutes等。不要在代码中使用任何当前名称-世界将变得更美好,孩子们不会哭泣,等等
“有了MVC中所有的命名约定,一个名为Controllers的控制器会导致一些奇怪的行为,我并不感到惊讶。”
如果感觉奇怪-不要这样做:)显然,问题与控制器(即ControllersController)的名称无关,而是与URL路由的名称有关
在my Global.asax.cs中,我添加了一条自定义路线,如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
//Route /controllers/ to /Home/Index
routes.MapRoute(
"Controllers",
"controllers/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
请注意,自定义路由(名为“控制器”)路由到HomeController(而不是ControllersController)
我希望当浏览器指向时,MVC会返回/Home/Index页面。相反,会抛出404错误。但是,如果浏览器指向,则路由成功。-这与我在本文开头提到的症状相同
基于此测试,我认为可以安全地假设问题不在于控制器的命名约定,而在于MVC路由的命名约定
为了继续构建我的应用程序,我将把ControllersController的名称更改为ControllerSystemsController。同时,我想知道为什么MVC路由器在使用“控制器”作为控制器名称的路由上不能像预期的那样工作。有人能解释一下吗?哇,你救了我一天!!!我有一个控制器ProductsController,有一个名为Products的文件夹,在product文件夹中我有子文件夹,其中有产品id,在每个产品文件夹中我有与产品相关的静态文件,这个项目的结构给了我很多问题,直到我添加了routes.RouteExistingFiles=真的谢谢大家!