0

ASP.Net MVC2コンテンツフォルダーのコンテキストで実行されているローカリゼーションhttphandlerがあります(その実行の一部は、/ Content / cssにある.lessファイルのコンパイルです)。この特定のリクエストセットのデフォルトルートは次のようになります。

context.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

context.MapRoute(
    "Area_default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = new VirtualDirectoryConstraint("VDirectory1") },
    new string[] { "Namespace.One.MVC" }
);

(余談ですが、関連性はないと思いますが、念のために、要求が渡されたアプリケーションパス/仮想ディレクトリからのものでない場合、VirtualDirectoryConstraintはこのルートでの一致を拒否します)

この構成では、http://server.net/VDirectory1/Content/css/LessCompiler.axdContentControllerクラスがないため、への呼び出しは失敗します。すべてうまくいっています。

追加すると

context.Routes.IgnoreRoute("{Content}/{*pathInfo}");

その呼び出しは成功しますが、その後の呼び出しは

http://server.net/VDirectory1/Localization/ClientScript/en-US.js

http://server.net/VDirectory1/Authorization/ClientScript

fail. Looking at Phil Haack's RouteDebugger tool, those calls are matching the Content IgnoreRoute route:

True    {Content}/{*pathInfo}   (null)  (null)  (null)

and are therefore not being routed to the LocalizationController and AuthorizationController, respectively.

Clearly I'm misunderstanding something about how the IgnoreRoute is supposed to be used and why that particular IgnoreRoute is matching those requests. What am I missing?

4

1 に答える 1

2

Shouldn't your IgnoreRoute use Content instead of {Content} ?

context.Routes.IgnoreRoute("Content/{*pathInfo}");

At the moment, {Content} is probably being expanded as a variable to nothing, which makes the pathinfo match everything.

于 2012-05-20T13:59:17.430 に答える