1

何千もの質問やブログを調べましたが、まだダムのルーティングを完全には理解していません!

Scott Hanselman のブログに沿って、.GIF への特定の呼び出しをカスタム HttpHandler にルーティングしようとしていますが、MVC4 サイトの残りの部分は正常に動作します。私はそこへの道の90%です。

だから私が持っている私のRouteConfigで

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.Add("AnalyticsRoute", new Route("analytics/a.gif", new AnalyticsRouteHandler()));
    routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    routes.RouteExistingFiles = true;
}

そして私のweb.configには

<handlers>
  ...
  <add name="analytics" verb="*" path="analytics/a.gif" type="Lms.Analytics.AnalyticsHandler, Lms.Analytics" preCondition="managedHandler" />
</handlers>

このように、http://mysite.com/analytics/a.gifは正しくルーティングされ、すべて問題ありませんが、すべての ActionLinks はhttp://mysite.com/analytics/a.gif?action=Index&controller=Categoryとして解決されます。

RouteConfig で順序を逆にすると、つまり

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    routes.Add("AnalyticsRoute", new Route("analytics/a.gif", new AnalyticsRouteHandler()));
    routes.RouteExistingFiles = true;
}

すべてのリンクは正常に解決されますが、 http://mysite.com/analytics/a.gifを呼び出すと404 エラーが発生しますか?

私は何かばかげたことをしているに違いないのに、それが見えないだけですか?!

前もって感謝します

4

3 に答える 3

2

最終的に同様の投稿に出くわした後、私はそれをクラックしました。投稿は、なぜhttphandlerが実行されていないのかでした

HttpHandler で処理するファイルへのパスを無視する必要があります

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("analytics/a.gif");
        routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
        routes.RouteExistingFiles = true;
    }

問題は、web.config を追加して Route.Add を削除したときでした。404 が返されました。ルーティング エンジンが Handler を支配しすぎていたと思います。

于 2013-06-13T07:15:26.913 に答える