2016-11-28 159 views
2

Im將我的ASP.NET 4應用程序遷移到ASP.NET Core。我的API中的大多數方法都可以正常工作,但奇怪的是有些方法不行,我不明白爲什麼。控制器在遷移到ASP.NET Core後不工作1

我正在使用Owin.OAuth身份驗證(OAuthAuthorizationServerProvider),除了兩個調用之外,所有this.User(從ControllerBase)屬性都已正確填充。對於兩個控制器只有這個不行!

所以這個控制器的工作,更具體地在建設這個點。用戶不是空的,幷包含其持票人令牌的正確用戶。

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

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

該控制器不工作,當構造函數被擊中,this.User是空

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

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

注意this.User是從Microsoft.AspNetCore.Mvc.ControllerBaseAuthenticatedController繼承財產。

+0

你混淆了路由屬性與屬性HTTPGET? – benjrb

+0

我最初用'[HttpGet]'和'[Route(「api/...」)]'來裝飾它,它不起作用。我看到一些只使用'HttpGet'的例子,所以我想試試它..它沒有區別:) – Chris

回答

4

您不能從構造函數訪問User,因爲它依賴於ControllerContext屬性,該屬性在構造函數調用後由ASP.NET Core MVC初始化。

理想情況下,考慮重構您的代碼,以免它從構造函數訪問請求相關的屬性,如User

如果你真的不能重構它,考慮導入IHttpContextAccessor的構造函數依賴:

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

所以這就是爲什麼它不在構造函數中工作,但在方法中!謝謝你。我在構造函數中使用它,所以我不必在每次調用時重複代碼來創建我的DataService層。 – Chris

相關問題