迁移到ASP.NET Core 1后,控制器无法正常工作

时间:2016-11-28 16:56:21

标签: asp.net oauth-2.0 asp.net-core owin

我将我的ASP.NET 4应用程序迁移到ASP.NET Core。我的API中的大多数方法都可以正常工作,但奇怪的是有些方法没有,我看不出任何理由。

我正在使用Owin.OAuth身份验证(OAuthAuthorizationServerProvider),除了两次调用之外,其他所有调用都正确填充this.User(来自ControllerBase)属性。对于两个控制器,这不起作用!

所以这个控制器工作,更具体地说是在构造点.User是非null并且包含正确的Bearer令牌用户。

[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.UserMicrosoft.AspNetCore.Mvc.ControllerBaseAuthenticatedController继承的属性。

1 个答案:

答案 0 :(得分:4)

您无法从构造函数访问User,因为它依赖于ControllerContext属性,该属性在调用构造函数后由ASP.NET Core MVC初始化。

理想情况下,请考虑重构代码,以便它不会尝试从构造函数中访问依赖于请求的属性,例如User

如果您真的不能重构它,请考虑将IHttpContextAccessor导入为构造函数依赖项:

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