Как вернуть определенный код статуса и содержимое с контроллера?
Я хочу, чтобы приведенный ниже пример контроллера возвращал код состояния 418 без содержимого. Установка кода состояния достаточно проста, но затем кажется, что нужно что-то сделать, чтобы сообщить об окончании запроса. В MVC до ASP.NET Core или в WebForms это может быть вызов Response.End()
но как это работает в ASP.NET Core, где Response.End
не существует?
public class ExampleController : Controller
{
[HttpGet][Route("/example/main")]
public IActionResult Main()
{
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
// How to end the request?
// I don't actually want to return a view but perhaps the next
// line is required anyway?
return View();
}
}
Ответы
Ответ 1
this.HttpContext.Response.StatusCode = 418;//I'm a teapot
Как закончить запрос?
Попробуйте другое решение, просто:
return StatusCode(418);
Вы можете использовать StatusCode(???)
для возврата любого HTTP-кода состояния.
Также вы можете использовать выделенные результаты:
Успех:
-
return Ok()
← Http код статуса 200 -
return Created()
← Http код статуса 201 -
return NoContent();
← Http код статуса 204
Ошибка клиента:
-
return BadRequest();
← Http код состояния 400 -
return Unauthorized();
← Http код статуса 401 -
return NotFound();
← Http код статуса 404
Больше деталей:
Ответ 2
Этот код может работать для non-.NET Core MVC контроллеров:
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
return Json(new { status = "mer" }, JsonRequestBehavior.AllowGet);
Ответ 3
Если кто-то хочет сделать это с IHttpActionResult
может быть в проекте веб-API, может быть полезно ниже.
// GET: api/Default/
public IHttpActionResult Get()
{
//return Ok();//200
//return StatusCode(HttpStatusCode.Accepted);//202
//return BadRequest();//400
//return InternalServerError();//500
//return Unauthorized();//401
return Ok();
}