C# CreatedAtRoute CreateDataAction未返回正确的响应

C# CreatedAtRoute CreateDataAction未返回正确的响应,c#,asp.net-core,asp.net-core-3.1,C#,Asp.net Core,Asp.net Core 3.1,我有以下代码,如果我对CreateBook进行post调用,它将成功返回,但是 有以下回应: { "id": "a0add985-60f1-4adc-e15e-08d7d51b721a", "title": "string", "description": "string", "amountOfPages": null, "authorId": "2902b665-1190-4c70-9915-b9c2d7680450", "author": null } 如果我理解正

我有以下代码,如果我对CreateBook进行post调用,它将成功返回,但是 有以下回应:

{
  "id": "a0add985-60f1-4adc-e15e-08d7d51b721a",
  "title": "string",
  "description": "string",
  "amountOfPages": null,
  "authorId": "2902b665-1190-4c70-9915-b9c2d7680450",
  "author": null
}
如果我理解正确,它应该通过传递authord和bookID来调用函数getBook 它将返回该书和作者的值,而不是bookToAdd中的书? 请让我知道,谢谢你们

    /// <summary>
    /// Get a book by id for a specific author
    /// </summary>
    /// <param name="authorId">The id of the book author</param>
    /// <param name="bookId">The id of the book</param>
    /// <returns>An ActionResult of type Book</returns>
    /// <response code="200">Returns the requested book</response>
    [HttpGet("{bookId}",Name = "GetBook")]
    [ProducesResponseType(StatusCodes.Status404NotFound)]
    [ProducesResponseType(StatusCodes.Status200OK)]
    public async Task<ActionResult<Book>> GetBook(
        Guid authorId,
        Guid bookId)
    {
        if (! await _authorRepository.AuthorExistsAsync(authorId))
        {
            return NotFound();
        }

        var bookFromRepo = await _bookRepository.GetBookAsync(authorId, bookId);
        if (bookFromRepo == null)
        {
            return NotFound();
        }

        return Ok(_mapper.Map<Book>(bookFromRepo));
    }




    /// <summary>
    /// Create a book for a specific author
    /// </summary>
    /// <remarks> default  2902B665-1190-4C70-9915-B9C2D7680450</remarks>
    /// <param name="authorId">The id of the book author</param>
    /// <param name="bookForCreation">The book to create</param>
    /// <returns>An ActionResult of type Book</returns>
    /// <response code="422">Validation error</response>
    [HttpPost()]
    [Consumes("application/json")]
    [ProducesResponseType(StatusCodes.Status201Created)]
    [ProducesResponseType(StatusCodes.Status404NotFound)]
    [ProducesResponseType(StatusCodes.Status422UnprocessableEntity, 
        Type = typeof(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary))]
    public async Task<ActionResult<Book>> CreateBook(
        Guid authorId,
        [FromBody] BookForCreation bookForCreation)
    {
        if (!await _authorRepository.AuthorExistsAsync(authorId))
        {
            return NotFound();
        }

        var bookToAdd = _mapper.Map<Entities.Book>(bookForCreation);
        bookToAdd.AuthorId = authorId;
        _bookRepository.AddBook(bookToAdd);
        await _bookRepository.SaveChangesAsync();

        //return CreatedAtAction(
        //    nameof(GetBook),
        //     new { authorId = authorId, bookId = bookToAdd.Id },
        //    //new { version = HttpContext.GetRequestedApiVersion().ToString(), authorId, bookId = bookToAdd.Id },
        //    bookToAdd);

        return CreatedAtRoute(
            routeName: "GetBook",
            routeValues: new { authorId = authorId, bookId = bookToAdd.Id },
            value: bookToAdd
            );
    }
//
///按特定作者的id获取一本书
/// 
///该书作者的身份证
///书的id
///一本书
///返回请求的书本
[HttpGet(“{bookId}”,Name=“GetBook”)]
[产品响应类型(StatusCodes.Status404NotFound)]
[产品响应类型(StatusCodes.Status200OK)]
公共异步任务GetBook(
Guid authorId,
Guid(图书ID)
{
如果(!wait _authorRepository.AuthorExistsAsync(authorId))
{
返回NotFound();
}
var bookFromRepo=await\u bookRepository.getbooksync(authorId,bookId);
if(bookFromRepo==null)
{
返回NotFound();
}
返回Ok(_mapper.Map(bookFromRepo));
}
/// 
///为特定作者创建一本书
/// 
///默认值2902B665-1190-4C70-9915-B9C2D7680450
///该书作者的身份证
///要创作的书
///一本书
///验证错误
[HttpPost()]
[使用(“应用程序/json”)]
[产品响应类型(StatusCodes.Status201Created)]
[产品响应类型(StatusCodes.Status404NotFound)]
[产品响应类型(StatusCodes.Status422不可处理实体,
Type=typeof(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary))]
公共异步任务CreateBook(
Guid authorId,
[FromBody]BookForCreation(创建书)
{
如果(!wait _authorRepository.AuthorExistsAsync(authorId))
{
返回NotFound();
}
var bookToAdd=\u mapper.Map(bookForCreation);
bookToAdd.AuthorId=AuthorId;
_bookRepository.AddBook(bookToAdd);
wait_bookRepository.saveChangesSync();
//返回CreateDataAction(
//姓名(GetBook),
//新建{authorId=authorId,bookId=bookToAdd.Id},
////新建{version=HttpContext.GetRequestedApiVersion().ToString(),authorId,bookId=bookToAdd.Id},
//bookToAdd);
返回CreatedAtRoute(
routeName:“GetBook”,
RouteValue:new{authorId=authorId,bookId=bookToAdd.Id},
值:bookToAdd
);
}

这不是
CreatedAtRoute
的工作方式。它所做的只是设置一个头,以便客户机知道所创建资源的位置

在您的示例中,它会在响应上设置一个标题,如下所示

Location: https://example.com/api/Book/GetBook/123
您的
CreateBook
端点将返回
bookToAdd

“如果我理解正确…”否。只需设置响应的HTTP状态,并根据
routeName
routeValues
设置
Location
头<将不调用code>GetBook
方法。与
createDataAction
相同。