当我执行GET请求并且找不到任何数据时,控制器返回204。
[Route("user/v1/[controller]")]
public class UserLoginController : Controller
{
[HttpGet]
public async Task<UserLogin> Get(int userId)
{
var userLoginLogic = new UserLoginLogic();
return await userLoginLogic.GetUserLogin(userId);
}
}
这仅用于GET请求,POST,PUT,DELETE返回200空响应。这不符合我的招摇定义,该定义为200个响应定义了一个响应,我宁愿保持一致。
如果我通过该控制器提供HTML,但204用于REST API,则204会很好。
我如何得到它返回200?
答案 0 :(得分:5)
使用v2.1 +中的新ActionResult<T>
,您还可以重构为,可以明确地告诉控制器使用Ok()
帮助方法ok 200
[Route("user/v1/[controller]")]
public class UserLoginController : Controller {
[HttpGet]
public async Task<ActionResult<UserLogin>> Get(int userId) {
var userLoginLogic = new UserLoginLogic();
var model = await userLoginLogic.GetUserLogin(userId);
return Ok(model);
}
}
但是,如果实际上没有要返回的内容,这可能会产生误导。考虑使用适当的响应状态
[Route("user/v1/[controller]")]
public class UserLoginController : Controller {
[HttpGet]
public async Task<ActionResult<UserLogin>> Get(int userId) {
var userLoginLogic = new UserLoginLogic();
var model = await userLoginLogic.GetUserLogin(userId);
if(model == null) return NotFound(); //404
return Ok(model); //200
}
}
如果打算返回200 Ok,但没有内容
[Route("user/v1/[controller]")]
public class UserLoginController : Controller {
[HttpGet]
public async Task<ActionResult<UserLogin>> Get(int userId) {
var userLoginLogic = new UserLoginLogic();
var model = await userLoginLogic.GetUserLogin(userId);
if(model == null) return Ok()(); //200 with no content
return Ok(model); //200
}
}
答案 1 :(得分:2)
请参阅:
services.AddControllers(opt => // or AddMvc()
{
// remove formatter that turns nulls into 204 - No Content responses
// this formatter breaks Angular's Http response JSON parsing
opt.OutputFormatters.RemoveType<HttpNoContentOutputFormatter>();
})