3

MVC で httpHandlers を使用したことがありません。ただし、アプリケーションでセッションのタイムアウトを停止したいと考えています。ここで解決策を見つけました。 http://www.dotnetcurry.com/ShowArticle.aspx?ID=453

ただし、私の実装では、エラーメッセージが表示されます

パス '/Shared/KeepSessionAlive.ashx' のコントローラーが見つからないか、IController を実装していません

だからjquery;

$.post("/Shared/KeepSessionAlive.ashx", null, function () {
    $("#result").append("<p>Session is alive and kicking!<p/>");
});

コントローラーを探しています。これを停止して、代わりにハンドラ コードを実行するにはどうすればよいですか?

これをweb.configに入れてみました。

<httpHandlers>
    <add verb="*" path="KeepSessionAlive.ashx" type="XXXXXX.Views.Shared.KeepSessionAlive"/>
</httpHandlers>
4

1 に答える 1

3

ルート内の .ashx ファイルを無視してみてください。MVC はこれをコントローラー アクションにルーティングしようとしません。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("Shared/{resource}.ashx/{*pathInfo}");

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

これにより、MVC ルーティングは /shared/ 内の .ashx ファイルを無視します。ただし、他の場所にある .ashx ファイルでは機能しません。すべてのサブディレクトリで機能させたい場合は、代わりに次のことを試してください (このトリックに対するこの回答の功績):

routes.IgnoreRoute("{*allashx}", new { allashx = @".*\.ashx(/.*)?" });
于 2013-04-30T09:01:57.423 に答える