Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set HTTP status code from ASP.NET MVC 3?

We're using OpenWeb js libraries on the frontend, and they have a need for the .NET middle tier to send them a specific HTTP header status code when certain types of errors occur. I tried to achieve that by doing this:

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); } 

It kind of halfway worked. See screenshot: http status code http://zerogravpro.com/temp/pic.png

Notice I achieved the Status Code of 400 in the Response Header, but I really need the 400 in the Request Header. Instead, I get "200 OK". How can I achieve this?

My URL structure for making the call is simple: /Main/TestError/400

like image 848
HerrimanCoder Avatar asked Aug 24 '12 15:08

HerrimanCoder


2 Answers

There is extended discussion at What is the proper way to send an HTTP 404 response from an ASP.NET MVC action?

What you want to do is set Response.StatusCode instead of adding a 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); } 
like image 138
Steve Czetty Avatar answered Sep 19 '22 14:09

Steve Czetty


If all you want to return is the error code, you could do the following:

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

Reference: MSDN article on Mvc.HttpStatusCodeResult.

Otherwise, if you want to return other information use

Response.StatusCode = id 

instead of

Response.AddHeader("Status Code", id);  
like image 28
Nick Jones Avatar answered Sep 19 '22 14:09

Nick Jones