ここからASP.NET Identityのサンプルをダウンロードし、正常に実行することができました: https://github.com/rustd/AspnetIdentitySample
現在、プロジェクトでASP.NET Identityフレームワークを実装している最中ですが、ある問題に遭遇し、一日中イライラしています。
GetOwinContext()
は、私のHttpContext
の拡張メソッドとして存在しません。
クラスライブラリにIDフレームワークを実装しています。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`という追加パッケージがありませんでした。
これを検索してインストールしたら、うまくいきました。
しかし、様々なチュートリアルを見ても、そのようなライブラリやパッケージへの言及はありませんでした。また、Identityフレームワークをインストールした際にもインストールされませんでした...。私だけの問題かどうかは分かりませんが...。
EDIT
Microsoft.Owin.Host.SystemWebアセンブリにありますが、
System.Web名前空間の拡張メソッドなので、前者への参照を持ち、後者を
使用` している必要があります。
コントローラの外にいる場合は、現在の 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 System.Web;
問題を解決しました。 また、以下を追加する必要があります。
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
GetUserManagerメソッドを使用します。
マイクロソフトは、右クリックでこれを自動的に解決する方法を見つけることができず、他の欠落しているステートメントのように解決しました?
nugetパッケージ Microsoft.AspNet.Identity.Owin
がインストールされていることを確認します。次に、System.Net.Http
名前空間を追加します。
Web APIプロジェクトでこのエラーを取得するDevsの場合-。
GetOwinContext拡張メソッドは System.Web.Http.Owin
dllで定義されており、もう1つのパッケージが必要になります。 Microsoft.Owin.Host.SystemWeb
。 このパッケージは、プロジェクトからnugetからインストールする必要があります。
Install-Package Microsoft.AspNet.WebApi.Owin
Install-Package Microsoft.Owin.Host.SystemWeb
このエラーを解決するには、ケースでエラーが発生する理由を見つける必要があります。 コードの以下のポイントをクロスチェックしてください-。
1。 Microsoft.AspNet.Identity.Owin;
を参照する必要があります。
Microsoft.AspNet.Identity.Owin;を使用します。
2。 HttpContext.Current
の下で GetOwinContext()
を次のように定義します-。
_userManager1を返します。 ?? HttpContext.Current.GetOwinContext().GetUserManager< ApplicationUserManager>(); .
または。
_signInManagerを返します。 ?? HttpContext.Current.GetOwinContext().Get< ApplicationSignInManager>();。
GetOwinContext()が使用される完全なコード-。
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.Current.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
Namespace's 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;
あるプロジェクトから別のプロジェクトにコードを移動しているときに、このエラーが発生しました。
私は正しいパッケージと使用法をすべて持っていましたが、「GetOwinContext()」を機能させる前に、最初に構築する必要がありました。