成员资格重新启动 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按预期工作。

谢谢。

成员资格重新启动 Web API 控制器异步问题

在这里:

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;