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