2011-07-10 158 views
3

在我的ASP.NET MVC3项目中,我有一个名为内容的文件夹(MVC项目的默认文件夹)。但我也有一个名为内容的控制器。而当我想使用此控制器的默认操作时,我只需使用http://domain/content/,这相当于http://domain/content/index。但IIS返回403错误,并认为我要获取目录列表内容文件夹。那么这个问题已经在this问题中讨论过了。但我不知道如何重写我的URL以将默认操作附加到它。请有人帮忙。通过改变路由配置到指定ASP.NET控制器名称与文件夹名称冲突

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

只要避免使用相同的名字,现在你进入可以通过其他方式避免的不必要的问题。只需将您的内容文件夹重命名为公共或类似内容。 – mare

+2

那么,我知道。但我的问题是一般情况。如果遇到真实姓名冲突怎么办?无论如何,谢谢你提及。 –

回答

0

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

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

在你的情况

routes.RouteExistingFiles = true; 

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

例如,我在我的应用程序中有一个名为Touch的文件夹,并且我也有针对Touch的特定路线。因此,工作配置是:

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

我同意这种事情一般应避免,但有时它的好,有漂亮的URL :-)

+0

Downvote,因为我说我想在映射到路由规则之前_rewrite_传入的URL。我已经有了这些路线规则。但是IIS StaticHandler在响应中优先。 –

+1

如何在帖子中提及?对不起,我的思维扫描仪今天不工作。 – Mrchief

6

可以解决这个问题: