web-dev-qa-db-ja.com

ASP.NET ID - HttpContextにはGetOwinContextの拡張メソッドはありません

ここからASP.NET Identityサンプルをダウンロードし、正常に実行しました。 https://github.com/rustd/AspnetIdentitySample

私は今、プロジェクトにASP.NET Identityフレームワークを実装している最中であり、問​​題に遭遇しました。

GetOwinContext()は私のHttpContextの拡張メソッドとしては存在しません

私はクラスライブラリにアイデンティティフレームワークを実装しています。私は、Identityフレームワークの最新版(プレリリース版)をすべてインストールしました。これ以外のすべては問題なく動作しています。

私は私のコントローラで同じダイレクトと同じコードを実装しようとしましたが、同じ問題を見つけました。

私は何を参照していませんが、どこにも参照がありません。

私を殺しているのは、次のコードブロックです。

private IAuthenticationManager AuthenticationManager
{
    get
    {
        return HttpContext.GetOwinContext().Authentication;
    }
}

私は次のものへの参照を追加しました - 私のクラスライブラリの中で、そしてまたコントローラ上で直接の両方を試してみました、それらのどれも私のために働きません...

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using Microsoft.Owin;
using System.Web;

...これは私を壁に追いやっています....どんな考えか?

_ update _

サンプルでIdentity&OWINのバージョンを確認しました。また、自分のソリューションに同じバージョンがあることを確認しました。

そのため、サンプルでオブジェクトブラウザでGetOwinContextを検索するとメソッドを見つけることができますが、ソリューションで検索すると見つからないことがあります。見つけられない!

348

ARGH!

見つけました ... Microsoft.Owin.Host.SystemWebという特別なパッケージはありませんでした

私はこれを検索してインストールしたら、それはうまくいった。

今 - 私は私がすべてを逃したかどうかわからないが、様々なチュートリアルを通過するときにそのようなライブラリまたはパッケージへの参照を見つけなかった。私はすべてのこのアイデンティティフレームワークをインストールしたときにもインストールされませんでした...それは私だけだったかどうかわからない..

_ edit _ Microsoft.Owin.Host.SystemWebアセンブリ内にありますが、これはSystem.Web名前空間の拡張メソッドなので、前者への参照を持ち、後者をusingにする必要があります。

658

コントローラの外部にいる場合は、現在のHttpContextを参照する必要があると思います。 MVCコントローラには、現在のコンテキストへの基本参照があります。ただし、それ以外の場合は、現在のHttpContextが必要であることを明示的に宣言する必要があります。

return HttpContext.Current.GetOwinContext().Authentication;

表示されない場合は、上記のコード(IAuthenticationManager)を使用した新しいMVC 5プロジェクトテンプレートのアカウントコントローラの上部に、次のusingステートメントがあります。

using System.Threading.Tasks;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.Owin.Security;
using WebApplication2.Models;

それぞれをコメントアウトすると、GetOwinContext()は実際にはSystem.Web.Mvcアセンブリの一部であるように見えます。

167
Tommy

試行錯誤の後、私のコントローラとAsp.Netテンプレートコントローラのusingステートメントを比較しました。

using System.Web;

私のために問題を解決しました。あなたも追加する必要があるだろう:

using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;

GetUserManagerメソッドを使用します。

マイクロソフトはこれを右クリックで自動的に解決する方法を見つけられず、他の行方不明のusingステートメントのように解決することができませんか?

20
Ronen Festinger

私の場合は Microsoft.AspNet.WebApi.Owinを追加 nugetによる参照はトリックをしました。

16
DolceVita

NugetパッケージMicrosoft.AspNet.Identity.Owinをインストールしたことを確認してください。それからSystem.Net.Http名前空間を追加します。

14
CodeNotFound

使うだけ

HttpContext.Current.GetOwinContext()

私の場合はうまくいきました。

6
Honza P.

私はすべて正しいパッケージと使い方を持っていましたが、GetOwinContext()を動かすためには最初にビルドしなければなりませんでした。

3
Kevin Raffay

APIでUserManagerを取得する

return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();

appUserManagerはUserManagerから継承するクラスです。

3
Ashraf Maher

Web APIプロジェクトでこのエラーが発生する開発者向け -

GetOwinContext拡張メソッドはSystem.Web.Http.Owin dllで定義されており、もう1つのパッケージ、つまりMicrosoft.Owin.Host.SystemWebが必要になります。このパッケージはあなたのプロジェクトにnugetからインストールする必要があります。

パッケージへのリンク :OWINパッケージインストールコマンド -

Install-Package Microsoft.AspNet.WebApi.Owin    

System.webパッケージへのリンク :パッケージインストールコマンド -

Install-Package Microsoft.Owin.Host.SystemWeb

このエラーを解決するためにあなたはそれがあなたのケースでなぜ発生しているかを見つける必要があります。コード内の以下の点をクロスチェックしてください -

  1. Microsoft.AspNet.Identity.Owin;への参照が必要です

    microsoft.AspNet.Identity.Owinを使用します。

  2. 以下のようにHttpContext.Currentの下にGetOwinContext()を定義します -

     return _userManager1 ?? HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
    

    OR

    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
    

GetOwinContext()が使用される完全なコード -

 public ApplicationSignInManager SignInManager
 {
   get
   {
    return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
   }
    private set
    {
     _signInManager = value;
    }
  }

名前空間の GetOwinContext()が使用されているコードファイルで使用しています

using AngularJSAuthentication.API.Entities;
using AngularJSAuthentication.API.Models;
using HomeCinema.Common;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin.Security.DataProtection;

自分のコードをあるプロジェクトから別のプロジェクトに移動しているときにこのエラーが発生しました。

1