Project: ASP MVC 4 running under .net 4.0 framework:
When running an application under VS 2010 express (or deployed and running under IIS 7.5 on my local machine) the following (pseudocode) result from an action works as expected
[HttpPost]
public ActionResult PostWord(Model model)
{
....
Response.StatusCode = 400;
Return new JsonResult { data = new {fieldName = "Word", error = "Not really a word!" } };
(and I have assigned ContentType and ContentEncoding properties of the JsonResult object, with no difference in behaviour)
When the deployable is moved onto a web host (using IIS 7), firebug is telling me that the response is as expected (400) but there is no JSON in the response (ie there is no text of any kind). If I remove the line
Response.StatusCode = 400;
from the action, the JSON is perfectly formed in the response, but of course the response status code is 200 (OK), which interferes with the consuming javascript and appropriate function call.
Any thoughts on what might be going on and how to fix this? Thank you
I've created a subclass of JsonResult that allows you to specify the HttpStatusCode.
Then you can return this as your result and the status code will get set on the response. You can also test the status code on the result in your tests.
I had this exact same problem; in order to make sure that the correct answer is not buried in the comments (as it was for me), I want to reiterate @Sprockincat's comment:
For me at least, it was indeed an issue with IIS Custom errors, and can be solved with:
@Sprockincat - you should get credit for this. I'm just making it more visible because it's such a subtle fix to a problem that is quite difficult to diagnose.