「.NET Web API HttpResponseMessage Pattern?」

13 浏览
0 Comments

「.NET Web API HttpResponseMessage Pattern?」

我看到Web API 2控制器返回HttpResponse和实际对象。 例如:

public HttpResponseMessage Get(string id)
    {
        var app = apps.Single(c => c.Id == id);
        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ObjectContent(app,
                Configuration.Formatters.JsonFormatter)
        };
    }


或者

 public Application Get(string id)
    {
        return apps.Single(c => c.Id == id);
    }

我的问题是哪种方法是“正确”的? #2更简短,但是做#1是否更好,或者#2是否自动执行#1…?

admin 更改状态以发布 2023年5月21日
0
0 Comments

参考 这个这个 栈溢出讨论。

两种情况下返回的响应都是相同的 (HttpResponseMessage)。

HttpResponseMessage允许您使用HTTP协议(例如通过Headers属性),并统一您的返回类型。

返回CLR类型可以更易于阅读,但是,除非使用dynamicobject,否则您将失去以不同的状态代码返回不同类型的灵活性,这违背了返回特定类型的目的。

个人而言,我更喜欢使用IHttpActionResult(在v2中添加),并在控制器操作上指定ResponseTypeAttribute以改善可读性。

[HttpGet]
[ResponseType(typeof(Portfolio))]
public IHttpActionResult GetPortfolio([FromUri] long id)
{
    // get portfolio
    return Ok(portfolio);
}

您可以使用默认的IHttpActionResult实现(请参见上文的OkResult)轻松操纵响应消息(以RESTful的方式)。自己避免构建HttpResponseMessage还可以保持代码简洁。这里是有关IHttpActionResult的官方文章,这里是关于HttpResponseMessageIHttpActionResult的有趣讨论。

0