207

几个月前,Microsoft 决定更改 HttpResponseMessage 类。以前,您可以简单地将数据类型传递给构造函数,然后返回带有该数据的消息,但现在不行了。

现在,您需要使用 Content 属性来设置消息的内容。问题是它是 HttpContent 类型的,我似乎找不到将字符串转换为 HttpContent 的方法。

有谁知道如何处理这个问题?非常感谢。

4

8 回答 8

250

对于字符串,最快的方法是使用StringContent构造函数

response.Content = new StringContent("Your response text");

对于其他常见场景,还有许多附加的HttpContent 类后代。

于 2012-09-03T01:04:37.477 回答
143

您应该使用Request.CreateResponse创建响应:

HttpResponseMessage response =  Request.CreateResponse(HttpStatusCode.BadRequest, "Error message");

您不仅可以将对象传递给 CreateResponse 字符串,而且它会根据请求的 Accept 标头对它们进行序列化。这使您免于手动选择格式化程序。

于 2013-05-21T19:33:18.010 回答
71

显然,这里详细介绍了新的方法:

http://aspnetwebstack.codeplex.com/discussions/350492

引用亨利克的话,

HttpResponseMessage response = new HttpResponseMessage();

response.Content = new ObjectContent<T>(T, myFormatter, "application/some-format");

所以基本上,必须创建一个 ObjectContent 类型,它显然可以作为 HttpContent 对象返回。

于 2012-09-03T00:09:50.490 回答
64

最简单的单行解决方案是使用

return new HttpResponseMessage( HttpStatusCode.OK ) {Content =  new StringContent( "Your message here" ) };

对于序列化的 JSON 内容:

return new HttpResponseMessage( HttpStatusCode.OK ) {Content =  new StringContent( SerializedString, System.Text.Encoding.UTF8, "application/json" ) };
于 2016-12-10T13:52:30.307 回答
42

对于任何 T 对象,您可以执行以下操作:

return Request.CreateResponse<T>(HttpStatusCode.OK, Tobject);
于 2014-02-21T13:42:25.070 回答
15

您可以创建自己的专业内容类型。例如,一个用于 Json 内容,一个用于 Xml 内容(然后只需将它们分配给 HttpResponseMessage.Content):

public class JsonContent : StringContent
{
    public JsonContent(string content)
        : this(content, Encoding.UTF8)
    {
    }

    public JsonContent(string content, Encoding encoding)
        : base(content, encoding, "application/json")
    {
    }
}

public class XmlContent : StringContent
{
    public XmlContent(string content) 
        : this(content, Encoding.UTF8)
    {
    }

    public XmlContent(string content, Encoding encoding)
        : base(content, encoding, "application/xml")
    {
    }
}
于 2016-01-13T16:51:45.403 回答
5

受 Simon Mattes 回答的启发,我需要满足 IHttpActionResult 所需的 ResponseMessageResult 返回类型。还使用了 nashawn 的 JsonContent,我最终得到了......

        return new System.Web.Http.Results.ResponseMessageResult(
            new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK)
            {
                Content = new JsonContent(JsonConvert.SerializeObject(contact, Formatting.Indented))
            });

请参阅 nashawn 对 JsonContent 的回答。

于 2017-04-03T15:38:06.360 回答
-2

毫无疑问,你是正确的弗洛林。我在做这个项目,发现这段代码:

product = await response.Content.ReadAsAsync<Product>();

可以替换为:

response.Content = new StringContent(string product);
于 2017-06-07T20:04:23.770 回答