2011-07-10 205 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

可以解決這個問題: