Asp.Net Identity 2 で Web Api 2.1 を使用しています。ApiController のコンストラクターで認証済みのユーザーを取得しようとしています (依存関係を注入するために AutoFac を使用しています)が、コンストラクターが呼び出されたときにユーザーが認証されていないと表示されます。
DB書き込み操作の監査情報を生成できるように、ユーザーを取得しようとしています。
診断に役立ついくつかのことを実行してい
ます。Asp.Net Identity 2 での認証としてのみ
使用しています。これは、Asp で新しい Web Api 2.1 プロジェクトを作成するときに、デフォルトで有効になっている を削除したことを意味します。 .Net ID 2。 app.UseOAuthBearerTokens
app.UseCookieAuthentication(new CookieAuthenticationOptions())
内部WebApiConfig
では、リポジトリを注入しています:
builder.RegisterType<ValueRepository>().As<IValueRepository>().InstancePerRequest();
これが私のコントローラーです:
[RoutePrefix("api/values")]
public class ValuesController : ApiController
{
private IValueRepository valueRepository;
public ValuesController(IValueRepository repo)
{
valueRepository = repo;
// I would need the User information here to pass it to my repository
// something like this:
valueRepository.SetUser(User);
}
protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext)
{
base.Initialize(controllerContext);
// User is not avaliable here either...
}
}
しかし、コンストラクターで User オブジェクトを調べると、次のようになります。
認証は機能しています。トークンを渡さないと、Unauthorized
. トークンを渡して、いずれかのメソッドからユーザーにアクセスしようとすると、認証され、正しく入力されます。呼び出されたときにコンストラクターに表示されないだけです。
私のWebApiConfig
中で私は使用しています:
public static void Register(HttpConfiguration config)
{
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// ... other unrelated injections using AutoFac
}
config.SuppressDefaultHostAuthentication()
この行を削除すると、コンストラクターにユーザーが入力されることに気付きました。
これは期待されていますか?コンストラクターで認証されたユーザーを取得するにはどうすればよいですか?
編集: Rikard が提案したように、Initialize メソッドでユーザーを取得しようとしましたが、まだ利用できず、画像で説明されているのと同じ結果が得られます。