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.