public async Task <ActionResult <GetAuthorDetailsResponse> > AddAnAuthor([FromBody] PostAuthorRequest request) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } else { var author = new Author { FirstName = request.FirstName, LastName = request.LastName }; try { _context.Authors.Add(author); await _context.SaveChangesAsync(); var response = new GetAuthorDetailsResponse(author.Id, author.FirstName, author.LastName); return(CreatedAtRoute("get-author-by-id", new { Id = author.Id }, response)); } catch (DbUpdateException) // That author already exists! { // options here: You could return OK or Accepted. I mean, you did what the person wanted. // Or you could return a 303 - see other. we'll do that because it is more fun. var id = await _context.Authors.Where(a => a.FirstName == request.FirstName && a.LastName == request.LastName) .Select(a => a.Id).SingleOrDefaultAsync(); Response.Headers.Add("Location", Url.RouteUrl("get-author-by-id", new { Id = id })); return(StatusCode(303)); } } }
/// <summary> /// Creates a new author. /// </summary> /// <param name="request">The request.</param> /// <returns> /// <c>PostAuthorsResponse</c> with a new author id. /// </returns> public PostAuthorResponse Post(PostAuthorRequest request) { var result = authorService.Put( new PutAuthorRequest { Data = request.Data, User = request.User }); return(new PostAuthorResponse { Data = result.Data }); }
/// <summary> /// Creates a new author. /// </summary> /// <param name="request">The request.</param> /// <returns> /// <c>PostAuthorsResponse</c> with a new author id. /// </returns> public PostAuthorResponse Post(PostAuthorRequest request) { var result = authorService.Put( new PutAuthorRequest { Data = request.Data, User = request.User }); return new PostAuthorResponse { Data = result.Data }; }