[英].net core asp.net web api action returning unexpected status code
I have set up this action: 我已设置此操作:
[HttpPost]
[ProducesResponseType(typeof(Category), StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<IActionResult> CreateAsync(CategoryViewModel category)
{
if (category == null) return BadRequest();
if (!ModelState.IsValid) return BadRequest(ModelState);
if (!category.Fields.Any()) return BadRequest();
var request = Factory.Create(category);
_categoryService.Save(request);
await _categoryService.SaveChangesAsync();
return Ok(category);
}
The response type should be Category with a status code of 201, but when I run my tests I get a status code of 200. This is my test: 响应类型应该是类别 ,其状态码为201,但是当我运行测试时,我得到的状态码为200。这是我的测试:
[Test]
public async Task CreateCategory()
{
// Assemble
const string categoryId = "cameras";
var services = ControllerContext.GivenServices();
var controller = services.WhenCreateController();
var field = new Field { CategoryId = categoryId, Name = "Title" };
var category = new CategoryViewModel { Id = categoryId, Name = "Cameras", Fields = new List<Field>{ field } };
// Act
var result = await controller.CreateAsync(category);
var okObjectResult = result as OkObjectResult;
// Assert
okObjectResult.Should().NotBeNull();
Assert.AreEqual(StatusCodes.Status201Created, okObjectResult?.StatusCode);
services.MockCategoryService.Verify(m => m.Save(It.IsAny<Category>()), Times.Once);
services.MockCategoryService.Verify(m => m.SaveChangesAsync(), Times.Once);
}
This test fails on this line: Assert.AreEqual(StatusCodes.Status201Created, okObjectResult?.StatusCode);
该测试在此行失败:
Assert.AreEqual(StatusCodes.Status201Created, okObjectResult?.StatusCode);
because it is returning 200 instead. 因为它返回200。
Does anyone know why? 有人知道为什么吗?
The ProducesResponseType-Attribute is not what determines what your Action returns, it is used for things like swagger/OpenAPI to create documentation . ProducesResponseType-Attribute不是决定Action返回什么的属性, 它用于诸如swagger / OpenAPI之类的操作来创建文档 。
You need to change the return value of your Action to return Created(UriOfTheCreatedResource, category)
instead of return Ok(category)
. 您需要更改Action的返回值以
return Created(UriOfTheCreatedResource, category)
而不是return Ok(category)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.