成员资格重新启动 Web API 控制器异步问题
本文关键字:控制器 异步 问题 API Web 重新启动 成员 | 更新日期: 2023-09-27 18:33:42
我有一个问题(我猜)可能与 api 控制器有关。
public class AccountController : ApiController
{
private readonly UserAccountService<HierarchicalUserAccount> userAccountService;
private readonly AuthenticationService<HierarchicalUserAccount> authSvc;
public AccountController(AuthenticationService<HierarchicalUserAccount> authSvc)
{
authSvc = authSvc;
userAccountService = authSvc.UserAccountService;
}
[HttpGet]
public async Task<HttpResponseMessage> Get()
{
...
HierarchicalUserAccount account;
if (userAccountService.AuthenticateWithUsernameOrEmail("name@mail.com", "123456", out account))
{
authSvc.SignIn(account, false); //ERROR because authSvc is null
}
return await ... ;
}
当构造函数调用userAccountService和authSvc获取其值时,但在get方法中authSvc变为null,userAccountService按预期工作。
谢谢。
在这里:
public AccountController(AuthenticationService<HierarchicalUserAccount> authSvc)
{
authSvc = authSvc;
userAccountService = authSvc.UserAccountService;
}
您正在将局部变量authSvc
赋值回自身。您要分配类级别字段:
public AccountController(AuthenticationService<HierarchicalUserAccount> authSvc)
{
this.authSvc = authSvc;
userAccountService = authSvc.UserAccountService;
}
将来可以通过使用适当的命名约定(在私有字段前面加上下划线)来避免这种混淆。
private readonly AuthenticationService<HierarchicalUserAccount> _authSvc;