2017-03-21 13 views
2

達成しようとしているもの - 私のアプリケーションは単純にASP .Net Coreアプリケーションです。 Web APIではありません。私のアプリから外部ソースへのすべての投稿/取得要求の前にメソッドを実行したいとします。 SSL有効期限をいくつかのWebサイトAPIにチェックするために投稿要求を送信しています。応答によると、別の要求を送信しているかどうかはわかりません。私はすべてのリクエストの前にメソッド・メソッド・ステートメントを置いておきたいと思っています。私はそれをグローバルにしたいと思います。私はそれが発生したようhttp://www.sulhome.com/blog/10/log-asp-net-core-request-and-response-using-middlewarePOST/GETリクエストの前にメソッド/アクションを実行する.NETコア

に基づいてこれを達成しようとしていた

、このミドルウェアは、内部の要求(アプリケーション内で要求をルーティング)のために(私はそれが働いてい)動作します。

すべてのリクエストでそれを行う可能性はありますか?

ありがとうございました

答えて

2

.NETコアでカスタムミドルウェアを作成してMVパイプラインにすることができます。ここでは一例です:

コンフィグ方法でStartup.csで
public class MyMiddleware 
    { 
     private readonly RequestDelegate _next; 


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

     public async Task Invoke(HttpContext context) 
     { 
      //do your checkings 
      await _next(context); 
     } 
} 

ちょうどそれをregiester:

app.UseMiddleware<MyMiddleware>(Options.Create(options)); 
+0

私はあなたが言ったようにすべてを行っていますが、リクエストが**私のアプリケーション**から**私のアプリケーションになるときにのみ、このタスクの呼び出しにヒットします。私が達成したいのは、Invoke()が次のような状況で実行されるということです: 私のコントローラのアクションの後で、 '次のメソッド'でリクエストが外部のWebサイトに送信されます。このリクエストを送信する前に、Invoke()を実行したいと思います。だから 1.私のアプリへの投稿要求。 2.いくつかのメソッドがコントローラやその他のクラスで実行されています 3.Invoke()が実行されました - このタスクでは、SSLをチェックしてリクエストが送信されます 4.応答に応じて他のアクションが実行されます – Intern321

+0

ミドルウェアをconfigのパイプラインの終わり? – miechooy

+0

私の理解から(私が間違っていれば私を訂正してください)、彼は着信要求ではなく、発信要求を捕らえたいです。 –

0

あなたが発信要求にコールをして話をしているので、あなたが問題を解決するために2つのメカニズムを持っています:

  1. はそれがグロブを持っている(自分のRequestクラスを実装するアスペクト指向プログラミングライブラリ(のようなhttps://www.postsharp.net
  2. を使用しますすべてのリクエストがこのクラス(またはそれを継承するクラス)を使用して行われていることを確認してください。第二の点について

、良好な機構は、ベースクラスはHttpRequestMessageを受け取り、グローバルコードを実行SendRequest方法を提供することです。そのクラスを継承するクラスは、このメソッドを使用して、要求を送信し、メソッドの周りを実行できないように、基底のHttpClientへのアクセス権を持ちません。

関連する問題