Answers:
特别是对于字符串,最快的方法是使用StringContent构造函数
response.Content = new StringContent("Your response text");
对于其他常见方案,还有许多其他的HttpContent类后代。
您应该使用Request.CreateResponse创建响应:
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Error message");
您可以将对象(不仅是字符串)传递给CreateResponse,它将基于请求的Accept标头将它们序列化。这样可以避免您手动选择格式化程序。
CreateErrorResponse()
如果响应是错误的,则调用此方法会更正确,例如在此答案的示例中。在我使用的try-catch中,我使用的是:this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "message", exception);
而且,如果您完全关心尊重调用方的Accept标头,而又没有多余的假名,这是正确的答案。(并且您正在使用WebAPI)
ApiController
。如果您只是继承而已Controller
,那么它就行不通了,您必须自己创建它: HttpResponseMessage msg = new HttpResponseMessage(); msg.Content = new StringContent("hi"); msg.StatusCode = HttpStatusCode.OK;
显然,这里有详细的新方法:
http://aspnetwebstack.codeplex.com/discussions/350492
引用亨里克的话,
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new ObjectContent<T>(T, myFormatter, "application/some-format");
因此,基本上,必须创建一个ObjectContent类型,显然可以将其作为HttpContent对象返回。
new JsonMediaTypeFormatter();
取决于您的格式,它可能是a 或类似值
ObjectContent
找不到,使用WCF
最简单的单线解决方案是使用
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" ) };
您可以创建自己的专用内容类型。例如,一个用于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")
{
}
}
受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的回答。