2017-02-20 18 views
0

セッションが設定されていないため、コンテキストのセッションプロパティへのアクセスが発生します。ASP.NETコア1.0でのセッションの確認

設定によってセッションが使用可能かどうかを検出する方法。私はこれを行うことはできませんつまり

context.Session?.Clear();

+0

あなたは 'services.UseSessionを()'実行されていませんが設定に基づいて? – DavidG

+0

私はあなたが設定から直接取得することを提案しようとしていると仮定します..正直な設定は私が本当に持っているものではありません...私はちょうどそのセッションを説明する設定について述べました...現実的理由は少しです異なる...セッションは後で使用できますが、コードはすでにそれを考慮する必要があります。 – Maxim

答えて

3

最も安全で最もパフォーマンスの高い方法は、request featuresです。例えば、ここではそれが有効になっていない場合、セッションはnullを取得するための単純な拡張メソッドです:

public static ISession SafeSession(this HttpContext httpContext) 
{ 
    var sessionFeature = httpContext.Features.Get<ISessionFeature>(); 
    return sessionFeature == null ? null : httpContext.Session; 
} 

MVCコントローラから使用例:

var session = this.HttpContext.SafeSession(); 
+0

はい、私は同意します..少なくとも私は今何をしようとしています..))私はあなたが正しいと思います。私たちはこの答えを受け入れることができます。また、 "this.HttpContext"をインスタンスにするためにそれを更新することもできると思います(構文強調表示は間違っていると思います)。 – Maxim

+0

さて、私はこのメソッドがコントローラにあったと仮定していました。おそらくベースコントローラクラスであっても、それらのすべてに簡単にアクセスできるようになっていました。実際、拡張メソッドとしてうまくいくかもしれません... – DavidG

0

ハック回避策は、しかし、よりよい解決策が見つかるまで、あなたが作業を継続させるには十分かもしれません。

public class Startup 
{ 
    public static bool IsSessionAvailable { get; set; } 
    //... 

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
    { 
     IsSessionAvailable = false; // session not available 

    //... 

あなたのコントローラにあります。

if (Startup.IsSessionAvailable) 
{ 
    HttpContext.Session.Clear(); 
} 
関連する問題