{"record":{"id":"9d293fac6ce3ff29","repo":"TechnitiumSoftware/DnsServer","slug":"username-cannot-be-null-or-empty","errorCode":null,"errorMessage":"Username cannot be null or empty.","messagePattern":"Username cannot be null or empty\\.","errorType":"validation","errorClass":"ArgumentException","httpStatus":null,"severity":"error","filePath":"DnsServerCore/Auth/User.cs","lineNumber":171,"sourceCode":"\n        public static User CreateSsoUser(string displayName, string username, string ssoIdentifier)\n        {\n            User user = new User();\n\n            user.SetUsername(username);\n            user.DisplayName = displayName;\n            user._isSsoUser = true;\n            user._ssoIdentifier = ssoIdentifier;\n\n            return user;\n        }\n\n        public static bool IsUsernameValid(string username, bool throwException = false)\n        {\n            if (string.IsNullOrWhiteSpace(username))\n            {\n                if (throwException)\n                    throw new ArgumentException(\"Username cannot be null or empty.\", nameof(Username));\n\n                return false;\n            }\n\n            if (username.Length > 255)\n            {\n                if (throwException)\n                    throw new ArgumentException(\"Username length cannot exceed 255 characters.\", nameof(Username));\n\n                return false;\n            }\n\n            foreach (char c in username)\n            {\n                if ((c >= 97) && (c <= 122)) //[a-z]\n                    continue;\n\n                if ((c >= 65) && (c <= 90)) //[A-Z]","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/TechnitiumSoftware/DnsServer/blob/d0484b6c1e7439cdc53d67d81e9c876cda2ad756/DnsServerCore/Auth/User.cs#L153-L189","documentation":"Thrown by User.IsUsernameValid(username, throwException: true) when username is null, empty, or whitespace. It is an ArgumentException (parameter Username). IsUsernameValid is the shared validator used by username-setting paths; with throwException it reports the problem instead of returning false.","triggerScenarios":"Calling IsUsernameValid(blank, true) directly, or SetUsername/Create paths that delegate to it with a blank username when throwException is enabled.","commonSituations":"A create-user form submitted without a username; an import row with a blank username column; an SSO provisioning path that passes a null identifier through to the validator.","solutions":["Supply a non-empty, non-whitespace username.","Validate presence at the request boundary before calling IsUsernameValid.","Use IsUsernameValid(username) without throwException to branch cleanly on invalid input."],"exampleFix":"// before\nUser.IsUsernameValid(username, throwException: true);\n\n// after\nif (!User.IsUsernameValid(username))\n    return BadRequest(\"Username cannot be null or empty.\");","handlingStrategy":"validation","validationCode":"// Use the non-throwing overload to branch cleanly.\nif (!User.IsUsernameValid(username))\n    return BadRequest(\"Username cannot be null or empty.\");","typeGuard":null,"tryCatchPattern":"try { User.IsUsernameValid(username, throwException: true); }\ncatch (ArgumentException ex) when (ex.ParamName == \"Username\" && ex.Message.Contains(\"null or empty\"))\n{ return BadRequest(ex.Message); }","preventionTips":["Prefer IsUsernameValid without throwException for control flow.","Require the username field at the API boundary.","Reject blank usernames during import/migration."],"tags":["auth","user-management","validation"],"backgroundTag":null,"analyzedSha":"d0484b6c1e7439cdc53d67d81e9c876cda2ad756","analyzedAt":"2026-08-13T22:57:35.508Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}