2016-08-09 9 views
3

ミドルウェアにHttpContextのインスタンスを格納するのは安全ですか?HttpContext .NETミドルウェアのコア保存インスタンス

例:

public class TestMiddleware 
{   
    private readonly RequestDelegate next;  
    private HttpContext context; 
    public TestMiddleware(RequestDelegate next) 
    { 
     this.next = next; 
    } 

    public async Task Invoke(HttpContext context)   
    { 
     try 
     { 
      this.context = context; 

私はそれで動作するように他の民間の方法でそれを使用したいと思いますので、私は、これらの関数にパラメータとして、それを周りに渡すかの例に示すように、それを使用することができます。

でもスレッドセーフですか?

答えて

6

でもスレッドセーフですか?

ミドルウェアは必ずシングルトンであるため、そうではありません。特定のHttpContextを共有フィールドに格納すると、別の要求時に再利用される可能性があります(恐ろしいでしょう)。

+0

「ミドルウェアは必ずシングルトンだと思いますか? – haim770

+0

@ haim770これらは起動時にインスタンス化され、要求パイプラインに追加されます。これは不変です:https://github.com/aspnet/HttpAbstractions/blob/dev/src/Microsoft.AspNetCore.Http.Abstractions/Extensions/UseMiddlewareExtensions.cs #L43-L94 – Pinpoint

+0

@ haim770あなたが私を信頼しないなら、確認するのは簡単です:カスタムミドルウェアを作成し、そのコンストラクタにブレークポイントを設定します。起動時に1回だけ呼び出されることがわかります。 – Pinpoint

関連する問題