아래 예제 컨트롤러가 내용없이 상태 코드 418을 반환하기를 원합니다. 상태 코드를 설정하는 것은 충분히 쉽지만 요청의 끝을 알리기 위해 수행해야 할 작업이있는 것 같습니다. ASP.NET Core 이전의 MVC 또는 호출 일 수있는 WebForms Response.End()
에서 Response.End
존재하지 않는 ASP.NET Core에서는 어떻게 작동 합니까?
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();
}
}
답변
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
요청을 종료하는 방법은 무엇입니까?
다른 솔루션을 시도하십시오.
return StatusCode(418);
StatusCode(???)
HTTP 상태 코드를 반환하는 데
사용할 수 있습니다 .
또한 전용 결과를 사용할 수 있습니다.
성공:
return Ok()
← HTTP 상태 코드 200return Created()
← HTTP 상태 코드 201return NoContent();
← HTTP 상태 코드 204
클라이언트 오류 :
return BadRequest();
← HTTP 상태 코드 400return Unauthorized();
← HTTP 상태 코드 401return NotFound();
← HTTP 상태 코드 404
자세한 내용은:
- ControllerBase 클래스 (@Technetium에게 감사드립니다)
- StatusCodes.cs (ASP.NET Core에서 사용 가능)
- Wiki의 HTTP 상태 코드
- HTTP 상태 코드 IANA
답변
이 코드는 비 .NET Core MVC 컨트롤러에서 작동 할 수 있습니다.
this.HttpContext.Response.StatusCode = 418; // I'm a teapot
return Json(new { status = "mer" }, JsonRequestBehavior.AllowGet);
답변
누구든지 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();
}
답변
현재 개체 결과가 어떻게 생성되는지 살펴보십시오. 다음은 BadRequestObjectResult입니다. 값과 StatusCode가있는 ObjectResult의 확장입니다.
408과 똑같은 방식으로 TimeoutExceptionObjectResult를 만들었습니다.
/// <summary>
/// An <see cref="ObjectResult"/> that when executed will produce a Request Timeout (408) response.
/// </summary>
[DefaultStatusCode(DefaultStatusCode)]
public class TimeoutExceptionObjectResult : ObjectResult
{
private const int DefaultStatusCode = StatusCodes.Status408RequestTimeout;
/// <summary>
/// Creates a new <see cref="TimeoutExceptionObjectResult"/> instance.
/// </summary>
/// <param name="error">Contains the errors to be returned to the client.</param>
public TimeoutExceptionObjectResult(object error)
: base(error)
{
StatusCode = DefaultStatusCode;
}
}
고객:
if (ex is TimeoutException)
{
return new TimeoutExceptionObjectResult("The request timed out.");
}
답변
이를 수행하는 가장 좋은 방법은 다음과 같습니다.
return this.StatusCode(StatusCodes.Status418ImATeapot, "Error message");
‘StatusCodes’에는 모든 종류의 반환 상태가 있으며 https://httpstatuses.com/ 링크에서 모두 확인할 수 있습니다.
StatusCode를 선택하면 메시지와 함께 반환하십시오.