Asp.net mvc 3 MVC控制器名为控制器抛出;'中的服务器错误/';应用程序。”;

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

我正在使用ASP.NET MVC 3(Razor)并创建了一个名为“Controllers”的控制器,具体来说,控制器类名是“ControllersController”

以下是我的“控制器”控制器的一个片段:

public class ControllersController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}
除了创建ControllersController类之外,我还创建了一个Razor视图(Index.cshtml),该视图与ControllersController Index()操作相关。值得注意的是,我通过右键单击控制器中的Index()方法并选择“添加视图”创建了Index.cshtml视图

我遇到的问题是,当浏览器尝试转到时,会引发以下错误:

“/”应用程序中出现服务器错误。 找不到资源。 描述:HTTP404。资源 您正在寻找(或其中一个) 依赖项)可以被删除, 它的名字改变了,或者 暂时不可用。请 查看以下URL并确保 它拼写正确

请求的URL:/控制器/

我想指出两点:

  • 如果 浏览器显式转到
  • 未命名的控制器 控制器控制器不强制 用于指定/索引的浏览器 在其URL中的操作

  • 有了MVC中的所有命名约定,一个名为Controllers的控制器会导致一些奇怪的行为,我并不感到奇怪。我的问题是,;我需要做什么才能不必在浏览器的URL中指定/索引?

    这是因为在项目的磁盘上有一个名为“控制器”的文件夹。一种选择是将该文件夹重命名为其他文件夹。使用Visual Studio发布选项发布站点时,将不存在此问题,因为不会推送控制器文件夹。第二个更麻烦的解决方案是设置
    routes.routeeExistingFiles=trueregisterOutes
    函数中的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=真的谢谢大家!