ASP.NET MVC 3 컨트롤러에서 200 HTTP 상태 코드를 반환하는 방법


217

타사 서비스의 POST 데이터를 수락하는 응용 프로그램을 작성 중입니다.

이 데이터가 게시되면 200 HTTP 상태 코드를 반환해야합니다.

컨트롤러에서 어떻게해야합니까?

답변:


390

컨트롤러에서 다음과 같은 HttpStatusCodeResult를 반환합니다.

[HttpPost]
public ActionResult SomeMethod(...your method parameters go here...)
{
   // todo: put your processing code here

   //If not using MVC5
   return new HttpStatusCodeResult(200);

   //If using MVC5
   return new HttpStatusCodeResult(HttpStatusCode.OK);  // OK = 200
}

14
또는 오히려 "새로운 HttpStatusCodeResult ((int) HttpStatusCode.OK);
dan

1
@ 단, 필요하지 않습니다. int과 함께 걸리는 과부하가 있습니다 HttpStatusCode.
MEMark

11
204 상태 코드를 반환하려면 다음과 같이하십시오 : return new HttpStatusCodeResult (HttpStatusCode.NoContent);
David Silva Smith

1
@MEMark, 나는 그것을 작동시키기 위해 캐스팅해야했습니다. .NET 4 및 MVC 3을 사용하면 HttpStatusCode를 사용하는 재정의가 제공되지 않았습니다.
Shawn South

@ ShawnSouth,이 과부하가 포함 된 버전에 대한 문서에서 정보를 찾을 수없는 것 같습니다. msdn.microsoft.com/ko-kr/library/hh413957(v=vs.118).aspx
MEMark

52

200은 성공적인 요청을위한 일반적인 HTTP 헤더입니다. 그게 전부 라면 컨트롤러 만 있으면됩니다return new EmptyResult();


3
HttpStatusCodeResult(...)달성하려는 대상에 대해 훨씬 더 명확하므로 대신 사용해야합니다 . 허용 된 답변에 따라.
Ben

42

다음과 같이 응답의 상태 코드를 200으로 간단히 설정할 수 있습니다.

public ActionResult SomeMethod(parameters...)
{
   //others code here
   ...      
   Response.StatusCode = 200;
   return YourObject;  
}

10
이렇게하면 상태 코드뿐만 아니라 다른 정보를 다시 보낼 수 있기 때문에
공감

22
    [HttpPost]
    public JsonResult ContactAdd(ContactViewModel contactViewModel)
    {
        if (ModelState.IsValid)
        {
            var job = new Job { Contact = new Contact() };

            Mapper.Map(contactViewModel, job);
            Mapper.Map(contactViewModel, job.Contact);

            _db.Jobs.Add(job);

            _db.SaveChanges();

            //you do not even need this line of code,200 is the default for ASP.NET MVC as long as no exceptions were thrown
            //Response.StatusCode = (int)HttpStatusCode.OK;

            return Json(new { jobId = job.JobId });
        }
        else
        {
            Response.StatusCode = (int)HttpStatusCode.BadRequest;
            return Json(new { jobId = -1 });
        }
    }

정확히 내 유스 케이스, Json 객체를 반환하지만 HTTP_STATUS_CODE를 제공하고
싶음

WebAPI 리턴 상태 코드의 경우 다음을 사용하십시오. new StatusCodeResult (HttpStatusCode.NotModified, Request);
제임스 조이스

모든 사용 사례를 결합한 최상의 답변
vibs2006

7

.NET Core에서이를 수행하는 방법은 다음과 같습니다 (작성시).

public async Task<IActionResult> YourAction(YourModel model)
{
    if (ModelState.IsValid)
    {
        return StatusCode(200);
    }

    return StatusCode(400);
}

상태 코드 메소드가 리턴의 유형 StatusCodeResult 구현 IActionResult를 따라서 당신의 행동의 반환 형식으로 사용할 수 있습니다.

리 팩터로서 다음과 같은 HTTP 상태 코드 캐스트를 사용하여 가독성을 향상시킬 수 있습니다.

return StatusCode((int)HttpStatusCode.OK);

또한 내장 된 결과 유형 중 일부를 사용할 수도 있습니다. 예를 들면 다음과 같습니다.

return Ok(); // returns a 200
return BadRequest(ModelState); // returns a 400 with the ModelState as JSON

참조 StatusCodeResult- https: //docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.statuscoderesult?view=aspnetcore-2.1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.