回答:
特に文字列の場合、最も簡単な方法は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();
か、あなたのフォーマットに応じて、類似した
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" ) };
Tオブジェクトの場合、次のことができます。
return Request.CreateResponse<T>(HttpStatusCode.OK, Tobject);
Request
は、CreateResponse
メソッドを継承してApiController
いる場合にのみ使用できます。を使用している場合は機能しませんController
。
独自の特殊なコンテンツタイプを作成できます。たとえば、1つはJsonコンテンツ用で、もう1つは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))
});
JsonContentに関するnashawnの回答を参照してください。