Как вернуть определенный код статуса и содержимое с контроллера? - программирование
Подтвердить что ты не робот

Как вернуть определенный код статуса и содержимое с контроллера?

Я хочу, чтобы приведенный ниже пример контроллера возвращал код состояния 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();   
    }
}
4b9b3361

Ответ 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();
}