public async Task<IHttpActionResult> PostToken(Token token)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            char[] identifier = new char[5];
            byte[] randomData = new byte[5];

            using (RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
            {
                rng.GetBytes(randomData);
            }

            for (int idx = 0; idx < identifier.Length; idx++)
            {
                int pos = randomData[idx] % AvailableCharacters.Length;
                identifier[idx] = AvailableCharacters[pos];
            }

            string Token = new string(identifier);
            SHA256 hash = SHA256Managed.Create();

            String.Join("", hash
            .ComputeHash(Encoding.UTF8.GetBytes(Token))
            .Select(item => item.ToString("x2")));

            token.Value = Token;
            db.Tokens.Add(token);
            await db.SaveChangesAsync();

            return CreatedAtRoute("DefaultApi", new { id = token.Id }, token);
        }
        public async Task<IHttpActionResult> PutToken(int id, Token token)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            if (id != token.Id)
            {
                return BadRequest();
            }

            db.Entry(token).State = EntityState.Modified;

            try
            {
                await db.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!TokenExists(id))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return StatusCode(HttpStatusCode.NoContent);
        }