3

新しいユーザーを登録するために、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 であるかについての情報はもちろんありません。

上記で設定したすべてのフィールドがnullではないことを確認したため、明らかに、この問題の原因は設定していないものです。私が設定しているプロパティのほとんどは、このエラーを停止させようとしていたのですが、失敗しました。

何か案は?


編集:スタックトレースは次のとおりです。

at DotNetNuke.Entities.Portals.PortalController.IsMemberOfPortalGroup(Int32 portalId)
at DotNetNuke.Entities.Users.UserController.AutoAssignUsersToRoles(UserInfo user, Int32 portalId)
at DotNetNuke.Entities.Users.UserController.CreateUser(UserInfo& user)
in PlayerOnDemand.Common.Utils.ClientUserUtils.RegisterNewDnnAccount(String firstName, String lastName, String email, String password)C:\XOS\Projects\DNN\Website\DesktopModules\XOSDigital.PlayerOnDemand\PlayerOnDemand.Common\Utils\ClientUserUtils.cs:line 160

4

2 に答える 2

1

理解した。問題は、ユーザーのポータルを明示的に設定していなかったことです。

于 2012-04-13T14:00:45.470 に答える
0

「オブジェクトが設定されていません」である DNN の例外と、スタック トレースにより、それが portalSettings またはおそらく言語のようなものであることが明らかになるのは、通常、呼び出しのコンテキストで、現在の context.items コレクションに読み込まれた portalSettings オブジェクトがないためです。 .

これは、現在のリクエスト コンテキストが読み込まれていない、スケジュールされた通話で電子メールを生成したり、他の作業を行ったりするときによく発生します。

この問題により、DNN API の一部を使用するには、現在の portalSettings オブジェクトを偽のコンテキストでモックする必要がある場合があります。

于 2012-04-16T03:41:47.293 に答える