将内容放在HttpResponseMessage对象中?

时间:2012-09-03 00:02:06

标签: c# asp.net-mvc asp.net-web-api

几个月前,微软决定更改HttpResponseMessage类。之前,您可以简单地将数据类型传递给构造函数,然后返回包含该数据的消息,但不再是。

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

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

8 个答案:

答案 0 :(得分:180)

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

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

其他常见情况还有一些额外的HttpContent class descendants

答案 1 :(得分:112)

您应该使用Request.CreateResponse创建回复:

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

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

答案 2 :(得分:53)

显然,新的方法在这里详述:

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

引用Henrik,

HttpResponseMessage response = new HttpResponseMessage();

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

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

答案 3 :(得分:39)

对于您可以执行的任何T对象:

return Request.CreateResponse<T>(HttpStatusCode.OK, Tobject);

答案 4 :(得分:36)

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

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" ) };

答案 5 :(得分: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")
    {
    }
}

答案 6 :(得分:4)

受Simon Mattes的启发&#39;回答,我需要满足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的回答。

答案 7 :(得分:0)

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

response.Content = new StringContent(string product);

可以替换为:

{{1}}