2011-07-10 16 views
3

私のASP.NET MVC3プロジェクトでは、というコンテンツ(MVCプロジェクトのデフォルトフォルダ)というフォルダがあります。しかし、コントローラのコンテンツもあります。このコントローラーのデフォルト動作を使用する場合は、単にhttp://domain/content/を使用します。これはhttp://domain/content/indexに相当します。しかし、IISは403エラーを返し、私はコンテンツフォルダのディレクトリリストを取得するつもりだと思う。さて、この質問はすでにthis質問で議論されています。しかし、URLに書き換えてデフォルトのアクションを追加する方法はわかりません。誰か助けてください。ASP.NETコントローラ名がフォルダ名と競合しました

+3

:-)かなりのURLがあると便利ですちょうどあなたがしている今、同じ名前を使用しないよう他の方法では避けられない不必要な問題に陥る。 Contentフォルダの名前をpublicに変更するだけです。 – mare

+2

さて、私はそれを知っています。しかし、私の質問は一般的なケースです。本当の名前の衝突に遭遇すればどうなりますか?とにかく、言及いただきありがとうございます。 –

答えて

0

あなたは、このようなデフォルトルートを追加することができます:あなたが指定するルーティングの設定を変更することでこれを回避することができます

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

Downvote。私は、ルートルールにマップする前に着信URLを_rewrite_したいと言っていたからです。私は既にそのルートルールを実際に使っています。しかし、IIS StaticHandlerが優先的に応答します。 –

+1

投稿でそれを言及するのはどうですか?申し訳ありませんが、私のマインドスキャナは今日働いていません。 – Mrchief

6

:あなたのケースでは

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

routes.RouteExistingFiles = true; 

次に、本物の静的コンテンツがthによってぎこちなくされるのを防ぐためにいくつかの無視ルールを設定する必要がありますルーティングエンジン。

たとえば、私は自分のアプリでTouchというフォルダを持っていますが、私もTouchのための特定のルートを持っています。だから、作業の設定は次のとおりです。

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

私はこの種のものは、一般的に避けるべきであることに同意し、時にはそれが

関連する問題