如何从ASP.NET MVC 3控制器返回200 HTTP状态代码


217

我正在编写一个接受来自第三方服务的POST数据的应用程序。

发布此数据后,我必须返回200 HTTP状态代码。

如何从我的控制器执行此操作?

Answers:


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
或者更确切地说是“返回新的HttpStatusCodeResult((int)HttpStatusCode.OK);”
2012年

1
@dan,不需要。有重载int以及HttpStatusCode
MEMark 2013年

11
返回204状态代码,请执行以下操作:返回new HttpStatusCodeResult(HttpStatusCode.NoContent);
大卫席尔瓦·史密斯

1
@MEMark,我必须强制转换才能使其正常运行。使用.NET 4和MVC 3,没有为我提供采用HttpStatusCode的替代。
肖恩·南

@ShawnSouth,我似乎无法在文档中找到有关哪个版本包含此重载的任何信息。msdn.microsoft.com/zh-CN/library/hh413957(v=vs.118).aspx
MEMark 2014年

52

200只是用于成功请求的普通HTTP标头。如果这一切你所需要的,只是有控制器return new EmptyResult();


3
您应该改用HttpStatusCodeResult(...)它,因为它对要实现的目标更加明确。根据公认的答案。

42

您可以像下面这样简单地将响应的状态码设置为200

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

10
Upvote,因为这允许您发送其他信息以及状态码
Avrohom Yisroel 2015年

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/zh-cn/dotnet/api/microsoft.aspnetcore.mvc.statuscoderesult ? view = aspnetcore- 2.1

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.