ここから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
を検索するとメソッドを見つけることができますが、ソリューションで検索すると見つからないことがあります。見つけられない!
ARGH!
見つけました ... Microsoft.Owin.Host.SystemWeb
という特別なパッケージはありませんでした
私はこれを検索してインストールしたら、それはうまくいった。
今 - 私は私がすべてを逃したかどうかわからないが、様々なチュートリアルを通過するときにそのようなライブラリまたはパッケージへの参照を見つけなかった。私はすべてのこのアイデンティティフレームワークをインストールしたときにもインストールされませんでした...それは私だけだったかどうかわからない..
_ edit _ Microsoft.Owin.Host.SystemWeb
アセンブリ内にありますが、これはSystem.Web
名前空間の拡張メソッドなので、前者への参照を持ち、後者をusing
にする必要があります。
コントローラの外部にいる場合は、現在の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アセンブリの一部であるように見えます。
試行錯誤の後、私のコントローラとAsp.Netテンプレートコントローラのusingステートメントを比較しました。
using System.Web;
私のために問題を解決しました。あなたも追加する必要があるだろう:
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
GetUserManagerメソッドを使用します。
マイクロソフトはこれを右クリックで自動的に解決する方法を見つけられず、他の行方不明のusingステートメントのように解決することができませんか?
私の場合は Microsoft.AspNet.WebApi.Owinを追加 nugetによる参照はトリックをしました。
NugetパッケージMicrosoft.AspNet.Identity.Owin
をインストールしたことを確認してください。それからSystem.Net.Http
名前空間を追加します。
使うだけ
HttpContext.Current.GetOwinContext()
私の場合はうまくいきました。
私はすべて正しいパッケージと使い方を持っていましたが、GetOwinContext()
を動かすためには最初にビルドしなければなりませんでした。
APIでUserManagerを取得する
return HttpContext.Current.GetOwinContext().GetUserManager<AppUserManager>();
appUserManagerはUserManagerから継承するクラスです。
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
このエラーを解決するためにあなたはそれがあなたのケースでなぜ発生しているかを見つける必要があります。コード内の以下の点をクロスチェックしてください -
Microsoft.AspNet.Identity.Owin;
への参照が必要です
microsoft.AspNet.Identity.Owinを使用します。
以下のように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;
自分のコードをあるプロジェクトから別のプロジェクトに移動しているときにこのエラーが発生しました。