So geben Sie einen 200-HTTP-Statuscode vom ASP.NET MVC 3-Controller zurück


217

Ich schreibe eine Anwendung, die POST-Daten von einem Drittanbieter-Dienst akzeptiert.

Wenn diese Daten veröffentlicht werden, muss ich einen 200-HTTP-Statuscode zurückgeben.

Wie kann ich das von meinem Controller aus tun?

Antworten:


389

In Ihrem Controller würden Sie ein HttpStatusCodeResult wie folgt zurückgeben ...

[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
oder vielmehr "neues HttpStatusCodeResult ((int) HttpStatusCode.OK) zurückgeben;"
Dan

1
@ Dan, das wird nicht benötigt. Es gibt Überlastungen, die sowohl eine intals auch eine nehmen HttpStatusCode.
MEMark

11
Um einen 204-Statuscode zurückzugeben, gehen Sie wie folgt vor: return new HttpStatusCodeResult (HttpStatusCode.NoContent);
David Silva Smith

1
@MEMark, ich musste besetzen, damit es funktioniert. Bei Verwendung von .NET 4 und MVC 3 wurde mir keine Überschreibung bereitgestellt, die einen HttpStatusCode annehmen würde.
Shawn South

@ShawnSouth, ich kann in den Dokumenten anscheinend keine Informationen darüber finden, welche Versionen diese Überladung enthalten. msdn.microsoft.com/en-us/library/hh413957(v=vs.118).aspx
MEMark

52

200 ist nur der normale HTTP-Header für eine erfolgreiche Anforderung. Wenn das alles ist, was Sie brauchen, haben Sie einfach den Controllerreturn new EmptyResult();


3
Sie sollten HttpStatusCodeResult(...)stattdessen verwenden, da es viel expliziter ist, was Sie erreichen möchten. Gemäß der akzeptierten Antwort.
Ben

42

Sie können den Statuscode der Antwort einfach wie folgt auf 200 setzen

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

10
Upvote, weil dies Ihnen erlaubt, andere Informationen sowie nur den Statuscode zurückzusenden
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 });
        }
    }

Genau mein Anwendungsfall, Json-Objekt zurückgeben, wollte aber auch HTTP_STATUS_CODE liefern
sobelito

Verwenden Sie für WebAPI-Statuscodes: new StatusCodeResult (HttpStatusCode.NotModified, Request);
James Joyce

Beste Antwort, da es alle Anwendungsfälle kombiniert
vibs2006

7

Die Vorgehensweise in .NET Core ist (zum Zeitpunkt des Schreibens) wie folgt:

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

    return StatusCode(400);
}

Die Status Methode gibt eine Art von StatusCodeResult , die implementiert IActionResult und kann somit als Rückgabetyp Ihrer Aktion verwendet werden.

Als Refactor können Sie die Lesbarkeit verbessern, indem Sie eine Besetzung der HTTP-Statuscodes wie folgt verwenden:

return StatusCode((int)HttpStatusCode.OK);

Darüber hinaus können Sie auch einige der integrierten Ergebnistypen verwenden. Beispielsweise:

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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.