2016-11-28 18 views
2

イムに移行した後に動作していません。私のAPIのほとんどのメソッドは正常に動作しますが、不思議なことにいくつかの理由がありません。コントローラは、ASP.NETコアに私のASP.NET 4のアプリを移行ASP.NETコア1

私はOwin.OAuth認証(OAuthAuthorizationServerProvider)を使用していますが、2回以外の呼び出しではthis.UserControllerBase)プロパティが正しく設定されています。 2つのコントローラの場合にのみ、これは動作しません!

だから、このコントローラは、建設this.Userの時点で、より具体的に、作品はどれもnullで、そのベアラトークンのための正しいユーザが含まれています。このコントローラは動作しません

[Authorize] 
public class DriversController : AuthenticatedController 
{ 
    public DriversController() : base() 
    { 
     // this.User is none null! 
    } 

    [HttpGet] 
    [Route("api/drivers")] 
    public async Task<IActionResult> GetDrivers() 
    { 
     ... 
    } 
} 

コンストラクタがヒットしたとき、this.Userthis.UserAuthenticatedControllerから継承Microsoft.AspNetCore.Mvc.ControllerBaseの財産であるという帰

[Authorize] 
public class DriversAssignmentController : AuthenticatedController 
{ 
    public DriversAssignmentController() : base() 
    { 
     // this.User is null! 
    } 

    [HttpGet] 
    [Route("api/driverassignment")] 
    public async Task<IActionResult> GetDriversAssignments() 
    { 
     ... 
    } 
} 

注意です。

+0

あなたはルート属性HTTPGETと属性混ざっていますか? – benjrb

+0

は、私が最初に '[HTTPGET]'と '[ルート( "API/...")]'でそれを装飾され、それが動作しませんでした。私はちょうどので、私は...それはそれはコンストラクタで仕事をdoesntだから、なぜだろうが何の違い:) – Chris

答えて

4

ControllerContextプロパティに依存しているので、コンストラクターからUserにアクセスすることはできません。このプロパティは、コンストラクターの呼び出し後にASP.NETコアMVCによって初期化されます。

それはコンストラクタからUserのような要求に依存するプロパティにアクセスしようとしないので、理想的には、あなたのコードをリファクタリングすることを検討してください。

あなたが本当にがそれをリファクタリングすることができない場合は、コンストラクタの依存関係としてIHttpContextAccessorをインポート考える:

public DriversController(IHttpContextAccessor accessor) 
{ 
    var user = accessor.HttpContext.User; 
} 
+0

をしなかったが、方法で行い、それを試してみた考え出し 'HttpGet'を使用し、いくつかの例を見ました!!ありがとう。私はコンストラクタでそれを使用していたので、すべての呼び出しでDataServiceレイヤを作成するコードを繰り返す必要はありませんでした。 – Chris

関連する問題