ASP.NET Framework中HttpResponse与HttpResponseMessage的区别
HttpResponse(HttpContext.Response)与HttpResponseMessage 核心差异 二者最本质的区别是所属管线、定位完全不同,适用场景没有重叠,具体可以从几个维度区分:
- 所属框架与定位
HttpResponse属于System.Web命名空间,是ASP.NET 4.x 原生IIS请求管线的底层响应对象,和当前请求的HttpContext强绑定,从请求进入IIS到返回给客户端的整个生命周期都存在,所有上层框架(Web Forms、MVC5、Web API2)最终都是把内容写入这个对象来输出给客户端。HttpResponseMessage属于System.Net.Http命名空间,是ASP.NET Web API 2 专门引入的强类型响应模型,只在Web API自己的独立处理管线中流转,本身不直接对接响应流,最终会被Web API的宿主层转换后写入到底层的HttpResponse对象。
- 操作方式差异
- 操作
HttpResponse是直接对响应流做操作:设置状态码、添加响应头、直接写入字符串/二进制内容、跳转、结束响应都是即时生效的,没有额外的自动处理逻辑。 - 操作
HttpResponseMessage是对响应模型做配置:你可以给它设置状态码、挂载结构化内容、配置响应头,后续Web API管线会自动完成内容协商、媒体格式化(JSON/XML序列化)、编码处理、头信息校验等工作,不需要你手动往流里写内容。
- 操作
自定义异常响应的选型建议
结合你要实现全局自定义错误响应的场景,按你项目用的框架选就行:
- 如果你的项目是传统ASP.NET MVC5(控制器继承
System.Web.Mvc.Controller)或者Web Forms:直接操作HttpContext.Response即可,这个场景下框架不会识别HttpResponseMessage类型,手动操作底层响应对象是最直接的方案,全局异常处理的示例代码:
// 全局MVC异常过滤器中 protected override void OnException(ExceptionContext filterContext) { filterContext.ExceptionHandled = true; var response = filterContext.HttpContext.Response; response.StatusCode = 500; response.ContentType = "application/json;charset=utf-8"; response.Write(JsonConvert.SerializeObject(new { code = 500, message = "服务端自定义错误", success = false })); }
- 如果你的项目是ASP.NET Web API2(控制器继承
System.Web.Http.ApiController):优先返回HttpResponseMessage,不要直接操作HttpContext.Response,否则会绕过Web API的内容协商、格式化逻辑,容易出现响应重复写入、管道异常终止的问题,全局异常处理示例代码:
// Web API全局异常处理器中 public override void Handle(ExceptionHandlerContext context) { context.Result = new ResponseMessageResult(new HttpResponseMessage(HttpStatusCode.InternalServerError) { Content = new ObjectContent<CustomApiResponse>( new CustomApiResponse { Code = 500, Msg = "服务端自定义错误", Success = false }, GlobalConfiguration.Configuration.Formatters.JsonFormatter ) }); }
常见注意事项
- 如果你的项目是MVC+Web API混合部署的,需要分别为两个管线注册异常处理逻辑,不能共用一套处理代码。
- 不要在Web API的处理逻辑中调用
HttpResponse.End(),会直接中断IIS管线,导致Web API后续的响应日志、头处理逻辑全部跳过。 - 如果你需要做跨域、Cookie写入等底层操作,不管用哪个上层框架,最终都要通过
HttpResponse对象来实现。
内容的提问来源于stack exchange,提问作者Kevin Alexis Martinez Herrera
相关产品推荐
相关产品推荐

