ASP.NET MVC 3コントローラーから200 HTTPステータスコードを返す方法


217

サードパーティのサービスからのPOSTデータを受け入れるアプリケーションを書いています。

このデータがPOSTされると、200 HTTPステータスコードを返す必要があります。

コントローラからこれを行うにはどうすればよいですか?

回答:


389

コントローラでは、次のような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
または「return new HttpStatusCodeResult((int)HttpStatusCode.OK);」
dan

1
@dan、それは必要ありません。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/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200は、リクエストが成功した場合の通常のHTTPヘッダーです。それはだ場合、すべての必要なだけのコントローラを持っていますreturn new EmptyResult();


3
あなたは使用する必要がありHttpStatusCodeResult(...)、それははるかに明示的にあなたが達成しようとしているかについてであるとして代わりに。受け入れられた答えに従って。
ベン・

42

次のように、応答のステータスコードを200に設定するだけです。

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

10
これにより、ステータスコードだけでなく他の情報も返信できるようになります
Avrohom Yisroel

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も提供したかった
sobelito

ステータスコードを返すWebAPIの場合、次を使用します。new StatusCodeResult(HttpStatusCode.NotModified、Request);
James Joyce

すべての使用例を組み合わせた最良の回答
vibs2006

7

.NET Coreでこれを行う方法は(執筆時点では)次のとおりです。

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

    return StatusCode(400);
}

StatusCodeのメソッドが返すの種類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.