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応答に対して定義された応答を持つ私のswagger定義を混乱させます。
このコントローラーからHTMLを提供していれば、204で問題ありませんが、REST APIの場合です。
200を返すにはどうすればよいですか?
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を使用 ControllerBase.Ok()
メソッド
空のStatus200OK応答を生成するOkResultオブジェクトを作成します。
_[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
}
}
_
見る:
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>();
})