Обновление значения переменной не работает ASP. NET Core Web API - PullRequest
0 голосов
/ 22 января 2020

У меня есть список, который должен обновляться, когда приходит сообщение о петиции, но оно ничего не делает, не отображаются ошибки или что-то, что оно просто не обновляет, вы можете обнаружить ошибку или сказать мне обходной путь?

Вот мой код:

[ApiController]
public class UsersController : ControllerBase
{
    private List<User> users = new List<User>();

    [HttpGet]
    public IEnumerable<User> getAllUsers() 
    {
        users.Add(new User(1,"alan","alavarez","vasquez",new Location("mexico","guanajuato"),"mail","1234"));
        users.Add(new User(1,"alan","alavarez","vasquez",new Location("mexico","guanajuato"),"mail","1234"));
        users.Add(new User(1,"alan","alavarez","vasquez",new Location("mexico","guanajuato"),"mail","1234"));
        return this.users;
    }

    [HttpPost]
    public IEnumerable<User> addNewUser(User user)
    {
        this.users.Add(user);
        return this.users;
    } 
}

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Вот еще один более чистый подход к использованию шаблона репозитория и внедрения зависимостей.

Сначала создайте репозиторий для хранения пользователей:

public interface IUserRepository
{
    void AddUser(User user);

    void EditUser(User user);

    void RemoveUser(int userId);

    User GetUserById(int userId);

    IEnumerable<User> GetUsers();
}

Затем внедрите в память IUserRepository:

public class InMemoryUserRepository : IUserRepository
{
    private readonly List<User> _users;

    public InMemoryUserRepository()
    {
        _users = new List<User>();
    }

    public void AddUser(User user)
    {
        _users.Add(user);
    }

    public void EditUser(User user)
    {
        var index = _users.FindIndex(u => u.Id == user.Id);
        if (index < 0)
            return;

        _users[index] = user;
    }

    public void RemoveUser(int userId)
    {
        var index = _users.FindIndex(u => u.Id == userId);
        if (index < 0)
            return;

        _users.RemoveAt(index);
    }

    public User GetUserById(int userId)
    {
        return _users.Find(u => u.Id == userId);
    }

    public IEnumerable<User> GetUsers()
    {
        return _users;
    }
}

Затем зарегистрируйте IUserRepository и реализацию в Startup.cs классе в ConfigureServices методе с временем жизни синглета:

public void ConfigureServices(IServiceCollection services)
{
    .
    .
    .
    services.AddSingletone<IUserRepository, InMemoryUserRepository>();
}

И, наконец, добавьте репозиторий в ваш контроллер:

[ApiController]
public class UsersController : ControllerBase
{
    private readonly IUserRepository _userRepository;

    public UsersController(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    [HttpGet]
    public IEnumerable<User> getAllUsers()
    {
        _userRepository.AddUser(new User(1, "alan", "alavarez", "vasquez", new Location("mexico", "guanajuato"), "mail", "1234"));
        _userRepository.AddUser(new User(1, "alan", "alavarez", "vasquez", new Location("mexico", "guanajuato"), "mail", "1234"));
        _userRepository.AddUser(new User(1, "alan", "alavarez", "vasquez", new Location("mexico", "guanajuato"), "mail", "1234"));

        return _userRepository.GetUsers();
    }

    [HttpPost]
    public IActionResult AddNewUser(User user)
    {
        _userRepository.AddUser(user);

        return Ok();
    }
}
0 голосов
/ 22 января 2020

Поле users является экземпляром и будет создаваться и уничтожаться вашим контроллером при каждом запросе. Отметьте пользователей как статические , сделайте их глобальной переменной , затем вы можете добавлять элементы к ним по почте。

private static List users = new List();

И искать / заменять все this.users на users.

...