是不是总能在Web Api中返回HttpResponseMessage?

时间:2013-05-31 21:13:27

标签: asp.net-web-api

我一直在想这个问题,最好总是使用asp.net mvc web api返回HttpResponseMessage网页吗?

当我加载默认的webapi项目时,我发现他们没有在样本控制器中使用它

 // GET api/values
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        public string Get(int id)
        {
            return "value";
        }

我认为HttpResponseMessage包装了所有内容并使其成为一个好的Http请求。如果这是正确的,不仅仅使用它的好处是什么?

2 个答案:

答案 0 :(得分:18)

我总是返回HttpResponseMessage。 Web API的重点是能够公开HTTP API。假装您正在返回一个对象,然后依靠框架管道将对象转换为HTTPResponseMessage,这只是模糊了IMO的意图。

我相信,如果您自己支付创建HttpResponseMessage的额外费用,您将更好地了解Web API的实际工作方式。您将遇到更少的问题,因为您更有可能避免Web API执行您不期望的事情。您将更有可能利用HTTP功能,因为标题就在那里供您访问。

答案 1 :(得分:3)

为了分离问题,为什么不使用服务层(类库中的强类型方法)和Web服务层(ASP.NET WEB API)。
服务层可以很容易地被Winform,WPF,Console和没有Http依赖的测试项目使用,也可以通过ASPNET WebAPi作为web服务公开,例如用于移动应用程序和/或javascript。 Web服务层关注的是使用http问题(标题,内容类型,http状态..)公开服务层,以便您可以返回HttpResponseMessage。
这也使控制器非常薄,您可以使用DI注入服务