【问题标题】:Updating the value of a variable not working ASP.NET Core Web API更新变量的值不起作用 ASP.NET Core Web API
【发布时间】:2020-01-21 23:29:39
【问题描述】:

我有一个列表,当发布请愿书到来时应该更新它,但它什么也没做,没有显示错误或者它只是没有更新的东西你能发现错误或告诉我解决方法吗?

这是我的代码:

[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;
    } 
}

【问题讨论】:

    标签: asp.net asp.net-core asp.net-web-api


    【解决方案1】:

    users 字段是实例,每次请求都会由您的控制器创建和销毁。将用户标记为静态,使其成为全局变量,然后您可以通过帖子向其添加项目。

    private static List users = new List();
    

    并用users 搜索/替换所有this.users

    【讨论】:

    • 我如何让它全球化对不起我是新人
    【解决方案2】:

    这是使用存储库模式和依赖注入的另一种更简洁的方法。

    首先创建存储库来存储用户:

    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;
        }
    }
    

    然后在ConfigureServices方法中注册IUserRepository并在Startup.cs类中实现单例生命周期:

    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();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-30
      • 1970-01-01
      • 2017-05-15
      • 2020-03-30
      • 2021-11-07
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      相关资源
      最近更新 更多