gpt4 book ai didi

c# - WebApi 2 返回类型

转载 作者:可可西里 更新时间:2023-11-01 08:38:05 29 4
gpt4 key购买 nike

我正在查看 WebAPI 2 的文档,我对行动结果的设计方式感到非常失望。我真的希望有更好的方法。

所以文档说我可以退还这些:

**void**    Return empty 204 (No Content)

**HttpResponseMessage** Convert directly to an HTTP response message.

**IHttpActionResult** Call ExecuteAsync to create an HttpResponseMessage, then convert to an HTTP response message.

**Other type** Write the serialized return value into the response body; return 200 (OK).

不过,我没有看到一种干净的方法来返回带有自定义 HTTP 状态代码、自定义 header 和自动协商内容的项目数组。

我想看到的是类似的东西

public HttpResult<Item> Post()
{
var item = new Item();
var result = new HttpResult<Item>(item, HttpStatusCode.Created);
result.Headers.Add("header", "header value");

return result;
}

这样我可以浏览一个方法并立即看到返回的内容,并修改状态代码和 header 。

我找到的最接近的是 NegotiatedContentResult<T> ,带有奇怪的签名(为什么它需要一个 Controller 实例?),但是没有办法设置自定义 header ?

有没有更好的办法?

最佳答案

下面的代码应该给你你想要的一切:

[ResponseType(typeof(Item))]
public IHttpActionResult Post()
{
var item = new Item();
HttpContext.Current.Response.AddHeader("Header-Name", "Header Value");
return Content(HttpStatusCode.Created, item);
}

...如果您真的需要返回一个项目数组...

[ResponseType(typeof(List<Item>))]
public IHttpActionResult Post()
{
var items = new List<Item>();
// Do something to fill items here...
HttpContext.Current.Response.AddHeader("Item-Count", items.Count.ToString());
return Content(HttpStatusCode.Created, items);
}

关于c# - WebApi 2 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29549759/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com