17

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

当我加载默认 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 请求。如果这是正确的,不只是使用它有什么好处?

4

2 回答 2

18

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

我相信,如果您自己支付额外的前期成本来创建 HttpResponseMessage,您将更好地了解 Web API 的实际工作原理。你会遇到更少的问题,因为你更有可能避免 Web API 做一些你没有预料到的事情。您将更有可能利用 HTTP 功能,因为标头就在那里供您访问。

于 2013-05-31T21:31:17.550 回答
3

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

于 2013-12-09T13:58:57.797 回答