Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在通过c#创建新的DotNetNuke用户时会出现nullReferenceException?_C#_Dotnetnuke - Fatal编程技术网

为什么在通过c#创建新的DotNetNuke用户时会出现nullReferenceException?

为什么在通过c#创建新的DotNetNuke用户时会出现nullReferenceException?,c#,dotnetnuke,C#,Dotnetnuke,我的DotNetNuke模块中有以下代码用于注册新用户: protected static int RegisterNewDnnAccount(string firstName, string lastName, string email, string password) { // Create user var user = new UserInfo(); user.FirstName = firstName; user

我的DotNetNuke模块中有以下代码用于注册新用户:

protected static int RegisterNewDnnAccount(string firstName, string lastName, string email, string password)
    {
        // Create user
        var user = new UserInfo();
        user.FirstName = firstName;
        user.LastName = lastName;
        user.Email = email;
        user.DisplayName = string.Concat(firstName, " ", lastName);
        user.Username = email;
        user.IsSuperUser = false;

        user.Profile.FirstName = firstName;
        user.Profile.LastName = lastName;
        user.Profile.PreferredTimeZone = TimeZoneInfo.Local;
        user.Profile.PreferredLocale = "en-US";
        user.Profile.Telephone = string.Empty;
        user.Profile.Cell = string.Empty;
        user.Profile.PostalCode = string.Empty;
        user.Profile.City = string.Empty;
        user.Profile.Street = string.Empty;
        user.Profile.Region = string.Empty;

        // Set up membership
        var membership = new UserMembership(user);
        membership.Approved = true;
        membership.CreatedDate = DateTime.Now;
        membership.Password = password;
        membership.IsOnLine = false;
        user.Membership = membership;

        // Register the account
        var status = UserController.CreateUser(ref user);
        switch (status)
        {
            case UserCreateStatus.Success:
                return user.UserID;

            case UserCreateStatus.InvalidPassword:
                throw new InvalidOperationException("Failed to create user account: invalid password");

            case UserCreateStatus.InvalidEmail:
                throw new InvalidOperationException("Failed to create user account: Invalid email");

            case UserCreateStatus.DuplicateEmail:
                throw new InvalidOperationException("A user already exists with this email address");

            case UserCreateStatus.UserAlreadyRegistered:
                throw new InvalidOperationException("This user is already registered");

            default:
                throw new InvalidOperationException("user account creation failed for an unknown reason");
        }
    }
UserController.CreateUser(ref-user)被调用时方法时,DotNetNuke的API抛出一个
NullReferenceException
,当然没有关于实际为null的内容的信息

我已经验证了我上面设置的每一个字段都不是空的,所以很明显是我没有设置的东西导致了这个问题。我正在设置的大多数属性都是我试图使此错误停止的结果,但我没有成功

有什么想法吗


编辑:以下是堆栈跟踪:

位于
DotNetNuke.Entities.Portals.PortalController.IsMemberOfPortalGroup(Int32 portalId)

DotNetNuke.Entities.Users.UserController.AutoAssignUsersToRoles(UserInfo-user,Int32-portalId)

DotNetNuke.Entities.Users.UserController.CreateUser(UserInfo&user)

在C:\XOS\Projects\DNN\Website\DesktopModules\XOSDigital.PlayerOnDemand\PlayerOnDemand.Common\Utils\ClientUserUtils.registernewdnaccount(String firstName、String lastName、String email、String password)


我明白了。问题是我没有明确设置用户的门户。

DNN中的任何异常都是“未设置对象”,堆栈跟踪显示它是portalSettings或类似于语言的内容,这通常是因为在调用的上下文中,当前context.items集合中没有加载portalSettings对象

这通常发生在人们在没有加载当前请求上下文的预定呼叫中生成电子邮件或执行其他工作时


由于此问题,您可能必须在假上下文中模拟当前portalSettings对象,才能使用部分DNN Api。

您不需要初始化配置文件吗?user.Profile=newprofile(){//在此处输入所有属性};不,似乎创建一个新的
UserInfo
对象会自动实例化一个成员身份和配置文件对象。通过调试器逐步完成这一过程应该会显示什么是空的。访问空对象的不是我的代码,而是DNN的代码,所以我无法单步执行此类情况,将DNN的源代码包解压到您的开发站点上非常有帮助,这样您就可以逐步浏览DNN的代码并更快地跟踪类似的内容。您还可以在DNN执行类似操作的地方查看其代码(即,检查核心代码中谁在调用
CreateUser
),并确保您正在执行他们正在执行的所有操作。