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?

Paul Brown
quelle

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
}
Brian Behm
quelle
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();

Kevin Stricker
quelle
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;  
}
Jack
quelle
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 });
        }
    }
Brian Ogden
quelle
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

user1477388
quelle