【问题标题】:Membership reboot web api controller async issue会员重启 web api 控制器异步问题
【发布时间】:2014-12-08 20:35:26
【问题描述】:

我有一个问题(我猜)可能与 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 正常工作。

谢谢。

【问题讨论】:

  • 您是否在依赖注入容器中注册了身份验证服务?您的控制器是否包含不初始化 authSvc 的默认构造函数?
  • 我没有默认构造函数
  • @peer 这个问题与您提到的重复问题无关。 OP 知道该字段为 NULL,并在 ASP.NET Web API 初始化的上下文中询问为什么会这样。
  • @MaxD 那你注册服务了吗?您使用哪个 DI 容器?可以贴一下它的初始化代码吗?

标签: c# asp.net-web-api


【解决方案1】:

这里:

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;

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 2013-04-22
    • 2021-05-11
    • 2011-10-03
    • 1970-01-01
    • 2018-03-31
    • 2015-01-01
    • 2014-01-02
    • 1970-01-01
    相关资源
    最近更新 更多