ahmed_sa Ответов: 2

Какой тип возвращаемого сообщения пользователя уже существует при вызове функции checkusername web api ?


Проблема
what type of return in case of user exist on database asp.net core web api ?


Я сделал функцию создания пользователей на базе по asp.net веб-API ядра и он работает без

любая проблема .

Я замечаю, что больше пользователей повторяются, так что мне нужно предотвратить повторение записей пользователей на

база данных.


Я делаю функцию CheckUserName для проверки существования имени пользователя в базе данных в таблице user login

если существует запретите клиентам добавлять или создавать нового пользователя в случае существования

Моя проблема в случае существования пользователя мне нужно вернуть "пользователь уже существует" по типу возврата

о вызове функции CheckUserName "пользователь уже существует"

но как вернуть пользователю уже существующее сообщение

Что я уже пробовал:

[Produces("application/json")]
    [Route("api/UserLogins")]
    public class UserLoginsController : Controller
    {
        private readonly IUserLogins _services;
        public UserLoginsController(IUserLogins Services)
        {
            this._services = Services;
        }
     }
        [HttpPost]
        public UserLogins Post([FromBody]UserLogins userDto)
        {
            if (_services.CheckUserName(userDto.UserName))
            {
return ?????????????
            }
            return  _services.Create(userDto);
          
        }
public class UserLogins:SharedValues
    {
        public int UserLoginID { get; set; }
        public string UserName { get; set; }
        public string UserMail { get; set; }
        public string UserPass { get; set; }
        public int FkTeamID { get; set; }
        public Boolean IsAdmin { get; set; }


    }
 
 public interface IUserLogins
    {
        UserLogins Create(UserLogins user);
        bool CheckUserName(string username);
    }

2 Ответов

Рейтинг:
8

Richard Deeming

Вы отметили этот вопрос как ASP.NET ядро; я предполагаю, что вы используете по крайней мере v2.1?

Измените тип возврата действия на ActionResult<UserLogins>, который позволит вам вернуть либо вновь созданного пользователя, либо код состояния HTTP.

[HttpPost]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
public ActionResult<UserLogins> Post([FromBody] UserLogins userDto)
{
    if (_services.CheckUserName(userDto.UserName))
    {
        return StatusCode(409, $"User '{userDto.UserName}' already exists.");
    }
    
    return  _services.Create(userDto);      
}
Типы возврата действия контроллера в ASP.NET основной веб-API | Microsoft Docs[^]


Рейтинг:
0

MadMyche

Я бы сделал это так, чтобы иметь отдельные функции для проверки наличия использования и создания нового пользователя.

Вызывающая страница будет выполнять функцию "проверки" в качестве шага проверки; если она существует, просто дайте клиенту знать, что учетная запись уже существует, и спросите, хотят ли они перейти на страницу входа в систему.
Если учетная запись не существует, то вы можете легко войти в функцию create, не сообщая об этом конечному пользователю.

Если у вас возникли проблемы с пользователями, создающими несколько учетных записей с одинаковыми учетными данными, то может возникнуть несколько других проблем; как правило, таблица базы данных будет иметь первичный ключ или уникальный индекс в поле username, который вернет ошибку, если вы попытаетесь создать новую строку с тем же значением индекса/ключа.
Еще одна вещь, на которую я бы посмотрел, - это пользовательский интерфейс; и спрашиваю, почему так много людей пытаются создать несколько учетных записей.