ASP.NET MVC でルーティングを操作する方法を学んでいて、IgnoreRouteメソッドを理解しようとしています。
ユーザーが"Content/{filename}.html"
にアクセスできないようにしようとしています。これをRegisterRoutesメソッドの最初の呼び出しとして配置しました。これが私のコードです:
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" }
);
}
Localhost:53907/Content/Static.htmlのようなリンクにアクセスしようとすると、これまで理解していたファイルを表示できないはずですが、表示されます。
私は何が間違っているのですか?
MVCでルートを無視すると、MVCフレームワークにそれらのURLを取得しないように指示されます。
これは、基盤となるASP.NETが要求を処理できるようにすることを意味します。これにより、静的ファイルが表示されます。
そのフォルダーへのアクセスを本当にブロックしたい場合は、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>