控制器在迁移到 ASP.NET 核心 1 后不工作
Controller not working after migrating to ASP.NET Core 1
我正在将我的 ASP.NET 4 应用程序迁移到 ASP.NET Core。我的 API 中的大多数方法都可以正常工作,但奇怪的是有些方法不能,而且我也看不出任何原因。
我正在使用 Owin.OAuth 身份验证 (OAuthAuthorizationServerProvider
),并且除了两个调用外,所有调用都填充了 this.User
(来自 ControllerBase
)属性正确。仅对于两个控制器,这不起作用!
所以这个控制器可以工作,更具体地说,在构建时 this.User 是 none 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
为null
[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.ControllerBase
上的 属性,AuthenticatedController
继承自该 Microsoft.AspNetCore.Mvc.ControllerBase
。
你不能从构造函数访问User
,因为它依赖于ControllerContext
属性,它在构造函数被初始化后由ASP.NET Core MVC初始化已调用。
理想情况下,考虑重构您的代码,这样它就不会尝试从构造函数访问 User
等依赖于请求的属性。
如果你真的不能重构它,考虑导入IHttpContextAccessor
作为构造函数依赖:
public DriversController(IHttpContextAccessor accessor)
{
var user = accessor.HttpContext.User;
}
我正在将我的 ASP.NET 4 应用程序迁移到 ASP.NET Core。我的 API 中的大多数方法都可以正常工作,但奇怪的是有些方法不能,而且我也看不出任何原因。
我正在使用 Owin.OAuth 身份验证 (OAuthAuthorizationServerProvider
),并且除了两个调用外,所有调用都填充了 this.User
(来自 ControllerBase
)属性正确。仅对于两个控制器,这不起作用!
所以这个控制器可以工作,更具体地说,在构建时 this.User 是 none 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
为null
[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.ControllerBase
上的 属性,AuthenticatedController
继承自该 Microsoft.AspNetCore.Mvc.ControllerBase
。
你不能从构造函数访问User
,因为它依赖于ControllerContext
属性,它在构造函数被初始化后由ASP.NET Core MVC初始化已调用。
理想情况下,考虑重构您的代码,这样它就不会尝试从构造函数访问 User
等依赖于请求的属性。
如果你真的不能重构它,考虑导入IHttpContextAccessor
作为构造函数依赖:
public DriversController(IHttpContextAccessor accessor)
{
var user = accessor.HttpContext.User;
}