【问题标题】:ASP.NET MVC Routing with a controller named "PropertiesController" [closed]带有名为“PropertiesController”的控制器的 ASP.NET MVC 路由 [关闭]
【发布时间】:2009-07-01 18:45:39
【问题描述】:

我在尝试使用名称为 PropertiesController 的控制器(以及随后的路由)时遇到了一个棘手的问题(请耐心等待,因为我是 MVC 新手)。

我相信这是因为我的解决方案中有一个名为“Properties”的目录(我无法真正删除)。有没有办法解决这个问题?

路线设置只是一个简单的路线:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Properties", action = "List", id = "" } // Parameter defaults 
);

我在 IIS7 中请求“http://localhost/aptment2/properties/”时遇到的错误是:

肯定有我找不到的解决方法吗?干杯。

【问题讨论】:

  • 您是尝试直接浏览该视图还是先浏览 default.aspx 页面(例如使用 F5 或 Ctrl+F5)?只是好奇路由注册是否被绕过,如果您将该视图设置为起始页而不是 default.aspx。
  • 刚烧了 2 个小时试图调试这个,下次必须先记住他的 SO
  • 更糟糕的是 url `properties/index' 有效。

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


【解决方案1】:

由于其他人也遇到了同样的问题,我猜你在这里遇到了保留关键字(我想 ClassControllers 也没有了)。

这也不是第一次发生了 - 深入挖掘环境的内部结构,you can't route to Windows' reserved keywords either

【讨论】:

    【解决方案2】:

    我在配置为使用 IIS Express 的 MVC 3 应用程序上设置了 PropertiesController。我没有得到您所做的确切错误,但它是相似的(404.20 没有默认文档),我确信它是出于相同的原因。

    这在我们的生产环境中根本不会造成问题,因为我们发布了应用程序的编译版本,然后它没有 Properties 文件夹。

    为了在本地开发时解决此问题,我将所有静态内容(脚本/css/etc...)放在一个目录中,我在打开RouteExistingFiles 的同时忽略它。

      routes.IgnoreRoute("static/{*wildcard}");
      routes.RouteExistingFiles = true;
    

    这解决了我的问题,现在我可以无错误地浏览 example.com/properties/。

    【讨论】:

      【解决方案3】:

      运行快速测试,我得到了相同的行为。使用属性以外的东西是一个可行的选择吗?

      【讨论】:

      • 如果可能的话,我宁愿不这样做,毕竟 MVC 的理念是您拥有完全的控制权,并且您的 URL 命名方案要尽可能干净!
      • 嗯,有点。这就是路由背后的想法,不一定只是 MVC,但无论如何,MVC 依赖于某些约定,包括不使用保留字或其他资源的名称。我建议要么进一步锁定该路由定义(我将添加一个带有建议的编辑),要么为您的控制器提供一个不同的名称。
      • 我尝试进一步锁定路线并获得相同的结果。您可能对此很了解,但我很想知道是否有解决方法。
      • 看来你是对的 - 哦,好吧,我得把我的词库拿出来!
      • FWIW,我们有一个名为 PropertyController 的控制器,它在我们的一个项目中运行良好。但是我们有一个使用单数控制器名称的约定(而不是复数,例如“属性”)。
      【解决方案4】:

      我不知道这是否适合您,但您可以尝试禁用路由到现有文件。

      routes.RouteExistingFiles = false;
      

      【讨论】:

        猜你喜欢
        • 2013-09-29
        • 2010-12-15
        • 2013-06-11
        • 1970-01-01
        • 2015-06-27
        • 2014-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多