web-dev-qa-db-ja.com

ASP.Net vNextプロジェクトでセッションを使用できません

セッションを使用するASP.Net vNextプロジェクトがあります。しかし、セッションで値を取得または設定しようとしているときにこのエラーが発生します。

Microsoft.AspNet.Http.Core.dllで「System.InvalidOperationException」タイプの例外が発生しましたが、ユーザーコードでは処理されませんでした

追加情報:このアプリケーションまたは要求に対してセッションが構成されていません。

これが私のコントローラメソッドです:

    [AllowAnonymous]
    [HttpGet("/admin")]
    public IActionResult Index()
    {
        if (Context.Session.GetString("UserName") == null) // error thrown here
        {
            return RedirectToAction("Login");
        }

        return View();
    }

KVMパッケージ"Microsoft.AspNet.Session": "1.0.0-beta3"project.jsonファイルに追加し、Startup.csを介してセッションを使用するようにアプリケーションを構成しました。

public void ConfigureServices(IServiceCollection services)
{
    // code removed for brevity
    services.AddCachingServices();
    services.AddSessionServices();
}

public void Configure(IApplicationBuilder app)
    {
        app.UseMvc();
        app.UseInMemorySession(configure: s => s.IdleTimeout = TimeSpan.FromMinutes(30));
    }

GithubでvNextのドキュメントを確認しましたが、ASP.Netセッションに関する情報はあまりありません。何が悪いのですか?

21
hyde

だから私はこれを理解しました。修正は実際には非常に簡単でした。 ASP.Netはミドルウェアを順次リクエストパイプラインに追加するため、MVCを使用する前にセッションミドルウェアを使用するだけで済みました。詳細はこちら: https://stackoverflow.com/a/29569746/832546

固定コード:

public void Configure(IApplicationBuilder app)
{
    app.UseInMemorySession(configure: s => s.IdleTimeout = TimeSpan.FromMinutes(30));
    app.UseMvc();
}
25
hyde

@acrhistofのおかげで、リンクが役立ちました。

したがって、RC1を使用している場合は、次の依存関係をproject.jsonに追加します。

 "Microsoft.AspNet.Session": "1.0.0-rc1-final",
 "Microsoft.Extensions.Caching.Memory": "1.0.0",

startup.csファイル内:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddCaching();
        services.AddSession();
        services.AddMvc();
    }

そして

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
     app.UseSession(); //outside of dev  if (env.IsDevelopment())
     ....
     }
15
Johann Combrink

物事がもう一度変わったようで、有名なASP.NETセッションはrc1で異なるように構成する必要があります。 (UseInMemorySession()または他のAppBuilderメソッドはSessionに関連していません。サービスとして追加されました)。

一般に、Sessionをインストールして構成し、使用する必要があります。これらの手順はすべて非常に新しく、やや珍しいものです。さらに、それはキャッシュに依存します:

セッションはIDistributedCacheの上に構築されるため、これも設定する必要があります。そうしないと、エラーが発生します。

上記の引用はASP.NET 5ドキュメントからです。あなたがする必要があるすべてはここに記述されています: https://docs.asp.net/en/latest/fundamentals/app-state.html#installing-and-configuring-session

4