如何从ASP.NET MVC 3中设置HTTP状态码?

我们在前端使用OpenWeb js库,当某些types的错误发生时,他们需要.NET中间层向它们发送特定的HTTP头状态代码。 我试图做到这一点:

public ActionResult TestError(string id) // id = error code { Request.Headers.Add("Status Code", id); Response.AddHeader("Status Code", id); var error = new Error(); error.ErrorID = 123; error.Level = 2; error.Message = "You broke the Internet!"; return Json(error, JsonRequestBehavior.AllowGet); } 

这种中途工作。 见截图: http状态代码http://zerogravpro.com/temp/pic.png

注意我在Response Header中实现了400的状态码,但是我真的需要请求头中的400。 相反,我得到“200 OK”。 我怎样才能做到这一点?

我打电话的URL结构很简单:/ Main / TestError / 400

什么是从ASP.NET MVC操作发送HTTP 404响应的正确方法?

你想要做的是设置Response.StatusCode而不是添加一个Header。

 public ActionResult TestError(string id) // id = error code { Response.StatusCode = 400; // Replace .AddHeader var error = new Error(); // Create class Error() w/ prop error.ErrorID = 123; error.Level = 2; error.Message = "You broke the Internet!"; return Json(error, JsonRequestBehavior.AllowGet); } 

如果您想要返回的是错误代码,则可以执行以下操作:

 public ActionResult TestError(string id) // id = error code { return new HttpStatusCodeResult(id, "You broke the Internet!"); } 

参考: 关于Mvc.HttpStatusCodeResult的MSDN文章 。

否则,如果你想返回其他信息使用

 Response.StatusCode = id 

代替

 Response.AddHeader("Status Code", id);