2017-03-08 16 views
2

私はASP.NET CoreアプリケーションといくつかのデータをチェックするためのシンプルなOWINミドルウェアを持っています。しかし、私は、ページが要求されたときにのみミドルウェアを実行したいと思います。現在、画像、CSSなどの資産が要求されたときに実行されます。ASP.NET Core OWINミドルウェア

ページリクエストでのみ実行するowinミドルウェアコードを作成するにはどうすればよいですか?

登録:

app.UseSiteThemer(); 

サイトThemer拡張クラス:

public static class SiteThemerExtensions 
{ 
    public static IApplicationBuilder UseSiteThemer(this IApplicationBuilder builder) 
    { 
     return builder.UseMiddleware<SiteThemerMiddleware>(); 
    } 
} 

OWINミドルウェア:

public class SiteThemerMiddleware 
{ 
    private readonly RequestDelegate _next; 
    private readonly ISiteService _siteService; 

    public SiteThemerMiddleware(RequestDelegate next, ISiteService siteService) 
    { 
     _siteService = siteService; 
     _next = next; 
     //_logger = loggerFactory.CreateLogger<SiteThemerMiddleware>(); 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     await Task.Run(() => 
     { 

      Console.Write("OWIN Hit"); 
     }); 


     //_logger.LogInformation("Handling request: " + context.Request.Path); 
     await _next.Invoke(context); 
     //_logger.LogInformation("Finished handling request."); 
    } 
} 
+0

が後の静的ファイルハンドラミドルウェアよりもパイプラインでそれを追加するパイプラインの詳細を読むことができますか? –

+0

ミドルウェアの登録方法を教えてください。キーはおそらく、.Useで登録することから.Mapで登録するだけで、推測しているコードはなくなります。 – tpeczek

+0

@tpeczek私は先に進み、自分のコードで更新しました、ありがとう! – TheWebGuy

答えて

2

あなたはあなたのために使用できるASP.NETコア・パイプラインの二つの側面があります。ここでの目標:順序付けと分岐。

オーダリングに関するルールは非常に単純です。ミドルウェアが追加される順序は、実行される順序です。これは、あなたのようなミドルウェアがパイプラインを終了させるミドルウェア(例えば静的ファイル)の後に置かれた場合、発生した場合に呼び出されないことを意味します。

パイプラインを分岐するには、MapまたはMapWhenメソッドを使用できます。最初はパスに基づいてパイプラインを分岐し、もう一方は述語に基づいて分岐します。 MapまたはMapWhenで追加されたミドルウェアは、分岐条件が満たされた場合にのみ呼び出されます。

あなたはhere

関連する問題