控制器在迁移到ASP.NET Core后不工作1
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.ControllerBase
这AuthenticatedController
继承财产。
您不能从构造函数访问User
,因为它依赖于ControllerContext
属性,该属性在构造函数调用后由ASP.NET Core MVC初始化。
理想情况下,考虑重构您的代码,以免它从构造函数访问请求相关的属性,如User
。
如果你真的不能重构它,考虑导入IHttpContextAccessor
的构造函数依赖:
public DriversController(IHttpContextAccessor accessor)
{
var user = accessor.HttpContext.User;
}
所以这就是为什么它不在构造函数中工作,但在方法中!谢谢你。我在构造函数中使用它,所以我不必在每次调用时重复代码来创建我的DataService层。 – Chris
你混淆了路由属性与属性HTTPGET? – benjrb
我最初用'[HttpGet]'和'[Route(“api/...”)]'来装饰它,它不起作用。我看到一些只使用'HttpGet'的例子,所以我想试试它..它没有区别:) – Chris