如何在MVC操作返回错误状态时保持响应主体?

问题描述:

我想从我的MVC控制器返回BadRequest状态和错误消息:如何在MVC操作返回错误状态时保持响应主体?

public class TestController : System.Web.Mvc.Controller 
{ 
    public ActionResult Bad() 
    { 
     Response.StatusCode = 400; 
     return new JsonResult() 
     { 
      Data = new { Message = "Request is bad!" }, 
      JsonRequestBehavior = JsonRequestBehavior.AllowGet 
     }; 
    } 
} 

它的工作原理,当我在IISExpress启动应用程序,该方法返回响应正文:

{"Message":"Request is bad!"} 

但是当我部署相同站点到IIS(版本8.5)响应正文变为:

Bad Request 

为什么会发生这种情况?当状态不是200时,是否有一些设置可以保留响应主体?

我发现了两个解决方案:

  1. 设置Response.TrySkipIisCustomErrors为true。
  2. httpErrors
设置 existingResponsePassThrough