it-roy-ru.com

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

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

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


Подробнее:

179
Lukasz Makowej

Этот код может работать для не .NET Core MVC контроллеров:

this.HttpContext.Response.StatusCode = 418; // I'm a teapot
return Json(new { status = "mer" }, JsonRequestBehavior.AllowGet);
0
sobelito