2016-11-15 12 views
3

私はASP.NET MVCコアアプリケーションをbuilingていると私は私がGlobal.asaxのに前に持っていたようEndRequestのイベントを持っている必要があります。.NETコアEndRequestのミドルウェア

どうすれば実現できますか?

+0

私はこれがHTTPから重複していると思います: //stackoverflow.com/questions/35705830/how-to-implement-global-asax-events-by-owin – error505

答えて

5

ミドルウェアを作成し、できるだけ早くパイプラインに登録するのと同じくらい簡単です。例えば

public class EndRequestMiddleware 
{ 
    private readonly RequestDelegate _next; 

    public EndRequestMiddleware(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     // Do tasks before other middleware here, aka 'BeginRequest' 
     // ... 

     // Let the middleware pipeline run 
     await _next(context); 

     // Do tasks after middleware here, aka 'EndRequest' 
     // ... 
    } 
} 

await _next(context)への呼び出しがパイプラインダウンすべてのミドルウェアを実行します。すべてのミドルウェアが実行された後、の後にawait _next(context)コールが実行されます。ミドルウェアの詳細については、ASP.NET Core middleware docsを参照してください。特に、ドキュメントからこの画像は、ミドルウェアの実行が明らかに:Middleware pipeline

は、今、私たちは、好ましくは、できるだけ早く、Startupクラスのパイプラインにそれを登録する必要があります。

public void Configure(IApplicationBuilder app) 
{ 
    app.UseMiddleware<EndRequestMiddleware>(); 

    // Register other middelware here such as: 
    app.UseMvc(); 
} 
+0

リクエストが終了する前になぜ呼び出されるのかわかりませんか? – Vnuuk

+0

@Vnuuk私は自分の答えを更新しました。また、[ミドルウェアに関する文書](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware)を読むことをお勧めします。 –

関連する問題