2013-03-13 17 views
13

私はちょうどASP.NET MVCのルーティングで作業することを学んでおり、IgnoreRouteメソッドを理解しようとしています。ASP.NET MVCでルートを無視する

ユーザーが"Content/{filename}.html"にアクセスしないようにしようとしています。私はこれをRegisterRoutesメソッドの最初の呼び出しとして配置しました。 53907 /コンテンツ/ Static.html、それは私がこれまで理解して何からファイルを表示できるようにするべきではありませんが、それは表示を行います。私はlocalhostのようなリンクにアクセスしようとした場合

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("Content/{filename}.html"); 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 


    routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}", 
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
        new { controller = "^.*", action = "^Index$|^About$" }, 
        new[] { "UrlsAndRoutes.AditionalControllers" }); 
    routes.MapRoute("MyRoute2", "{controller}/{action}/{id}/{*catchall}", 
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
        new { controller = "^.*", action = "^Index$|^About$" }, 
        new[] { "UrlsAndRoutes.Controllers" }); 
    routes.MapRoute("ShopSchema2", "Shop/OldAction", new { controller = "Home", action = "Index" }); 
    routes.MapRoute("ShopSchema", "Shop/{action}", new { controller = "Home" }); 
    routes.MapRoute("", "X{controller}/{action}"); 

    routes.MapRoute(
     name: "", 
     url: "{controller}/{action}", 
     defaults: new { controller = "Home", action = "Index" } 
    ); 
} 

:ここに私のコードですそれ。

私は間違っていますか?

+0

、何の問題がありますか? –

+0

試しましたか?ルート.IgnoreRoute( "Content/{* pathInfo} .html"); – Jon

+0

http:// localhost:53907/Content/Static.htmlこのようなリンクにアクセスしようとすると、今まで理解しているファイルを表示できないはずですが、試した後に – aleczandru

答えて

16

MVCのルートを無視すると、MVCフレームワークはそれらのURLを取得しないように指示します。

これは、基本的なASP.NETが要求を処理できるようになり、幸いなことに静的ファイルを表示します。

+0

他の言葉で言えば、これはユーザーが彼をContent/{filename} .htmlに誘導するリンクをクリックした場合にのみ機能しますが、彼自身がリンクをタイプすれば彼はアクセスします。私はこのcorectlyを誇張していますか? – aleczandru

+0

@aleczandruいいえ、誰かがContent/{filename} .htmlというURLのファイルにアクセスして経路を無視すると、それを無視することでASP.NETに渡して処理しますURLに関係なくあなたをルーティングします。 – mattytommo

+0

okありがとうございました。 – aleczandru

1

本当にそのフォルダへのアクセスをブロックする場合は、web.configでそのフォルダを定義してください。

そのフォルダにweb.configを配置します。

内容は次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.web> 
     <authorization> 
      <!-- <allow roles="admin" /> --> //In case you want to give access to admin only. 
      <deny users ="*" /> 
     </authorization> 
    </system.web> 
</configuration> 
+1

それはフォルダへのアクセスをブロックすることではなく、ルーティングの仕組みを理解することです。私はアクセスをブロックすることができることを知っていますが、web.configを投げましたが、 – aleczandru

関連する問題