【问题标题】:ASP.NET Controller name conflicted with a folder nameASP.NET 控制器名称与文件夹名称冲突
【发布时间】:2011-07-10 19:05:16
【问题描述】:

在我的 ASP.NET MVC3 项目中,我有一个名为 Content 的文件夹(MVC 项目的默认文件夹)。但我也有一个名为 Content 的控制器。而当我想使用这个控制器的默认动作时,我只需使用http://domain/content/,相当于http://domain/content/index。但是 IIS 返回 403 错误并认为我会得到 Content Folder 的目录列表。好吧,这个问题已经在this question 中讨论过了。但我不知道如何重写我的 URL 以将默认操作附加到它。请有人帮忙。

【问题讨论】:

  • 只是避免使用相同的名称,现在您会遇到不必要的问题,而这些问题可以通过其他方式避免。只需将您的 Content 文件夹重命名为 public 或类似名称。
  • 嗯,我知道。但我的问题是一般情况。遇到实名冲突怎么办?无论如何,谢谢你的提及。

标签: asp.net-mvc-3 url-rewriting


【解决方案1】:

您可以通过更改路由配置来解决此问题:

routes.RouteExistingFiles = true;

然后您需要设置一些忽略规则,以防止真正的静态内容被路由引擎吞噬。

例如,我的应用中有一个名为 Touch 的文件夹,并且我还有一个特定的 Touch 路由。所以工作配置是:

routes.RouteExistingFiles = true;
routes.IgnoreRoute("Touch/Client/{*touchclientversion}", new { touchclientversion = @"(\d*)(/*)" });

我同意这种事情通常应该避免,但有时拥有漂亮的 URL 是件好事 :-)

【讨论】:

    【解决方案2】:

    您可以像这样添加默认路由:

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

    在你的情况下:

    routes.MapRoute(
                    "DefaultContent",                                              // Route name
                    "{controller}/{action}/{id}",                           // URL with parameters
                    new { controller = "Content", action = "Index", id = "" }  // Parameter defaults
                );
    

    【讨论】:

    • 投反对票,因为我说我想在传入的 URL 映射到路由规则之前重写。我已经有了这些路线规则。但是 IIS StaticHandler 优先响应。
    • 在帖子里提一下怎么样?抱歉,我的思维扫描仪今天不工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2011-08-17
    • 2013-11-06
    • 1970-01-01
    • 2014-11-12
    • 2013-04-20
    相关资源
    最近更新 更多