1

私は、何かのように、クラスライブラリにSESSIONSTATEを使用したいです> "NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。" クラスライブラリにsystem.Webへの参照があります。 .NET 4では、私はこれを安全に行うことができます。しかし、それは.NET 4.6.1の問題です。 どうすればこの問題を解決できますか? おかげASP.NET 5/MVC 6、クラスライブラリのセッションの使い方私はそれが例外をスローし、このメソッドを呼び出すとき</p> <pre><code>public static void SetUserId() { HttpContext.Current.Session["userId"] = 1; } </code></pre> <p>が、「要求の処理中に未処理の例外が発生しました。」:.NET 4.6.1で

+1

これは、クラスライブラリでセッションIDにアクセスする必要がある場合、間違っていることを示す良い兆候です。 – Tseng

+0

何が問題なのですか?私は.NET 4.0のプロジェクトを持っており、うまくいきます。 .NET 4.6.1に移行したときに問題が発生しました –

+0

実際の例外を調べてみますか? – CodeCaster

答えて

1

これはデフォルトでnullで、コンセプトは駆動ASP.NETコア1.0は、プラグイン可能なミドルウェアです。明示的にセッションをオプトインする必要があります。

Microsoft.Extensions.Caching.MemoryMicrosoft.AspNet.Sessionの両方の依存関係がproject.jsonに存在することを確認する必要があります。次に、あなたの Startup.csに次の行を追加します。

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddMvc(); 
    services.AddCaching(); 
    services.AddSession(options => { 
      options.IdleTimeout = TimeSpan.FromMinutes(30); 
      options.CookieName = ".MyApplication"; 
     }); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    app.UseSession(); 

    // Removed for brevity... 
} 

詳細な記事here。それはあなたがする必要があるすべてのものでなければなりません。

更新

は、WebアプリケーションのHttpContext.Current外を使用しようとしないでください。これは、HTTP要求/応答パイプラインのコンテキスト内でのみ意図されています。あなたが探している希望のインタラクションを達成するために抽象化を利用することが好ましい。

明示的な例を提供するために、より多くのソースコードを共有する必要があります。

+0

セッションStaeは私のASP.NETアプリケーションで利用できますが、私の問題はクラスライブラリの中にあります。 ASP.NETアプリケーションではセッションにアクセスしますが、クラスライブラリにはアクセスしません。ネット4.0では、私はそのような問題はありませんでした。例外は.NET 4.6.1に移行したときに発生します。ところで、クラスライブラリの中にstartup.csはありません。 –

+0

for Update:クラスライブラリのアプリケーション状態にアクセスするにはどうすればよいですか?セッションの代わりにwep:wep service?共有メモリ ?データベース?私はそれが流暢なコードではないので、私はクラスのライブラリにWebアプリケーションからパラメータを渡すしたくないことに注意してください。 –

+0

Ali - あなたはそれから地獄を抽象化します。あなたのクラスライブラリで現在のセッションが必要な場合は、それをコンストラクタの引数として渡します。 –

関連する問題