数ヶ月前、MicrosoftはHttpResponseMessageクラスを変更することを決めました。以前は、単純にデータ型をコンストラクタに渡してから、そのデータとともにメッセージを返すことができましたが、それはできなくなりました。
これで、Contentプロパティを使ってメッセージの内容を設定する必要があります。問題はそれがHttpContent型であるということです、そして、私は例えばHttpContentに文字列を変換する方法を見つけることができないようです。
誰もがこの問題に対処する方法を知っていますか?どうもありがとう。
どうやらそれを行うための新しい方法はここに詳述されています:
http://aspnetwebstack.codeplex.com/discussions/350492
ヘンリックを引用すると、
HttpResponseMessage response = new HttpResponseMessage();
response.Content = new ObjectContent<T>(T, myFormatter, "application/some-format");
そのため、基本的にはObjectContent型を作成する必要があります。これは明らかにHttpContentオブジェクトとして返すことができます。
特に文字列の場合、最も簡単な方法は StringContent コンストラクタを使用することです。
response.Content = new StringContent("Your response text");
その他の一般的なシナリオには、追加の HttpContentクラスの子孫 があります。
あなたは Request.CreateResponse を使ってレスポンスを作成するべきです:
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Error message");
文字列だけではなくオブジェクトをCreateResponseに渡すこともでき、リクエストのAcceptヘッダーに基づいてオブジェクトをシリアル化します。これにより、手動でフォーマッタを選択する手間が省けます。
どのTオブジェクトに対しても、次のことができます。
return Request.CreateResponse<T>(HttpStatusCode.OK, Tobject);
最も簡単な単一行の解決策は
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コンテンツ用の1つです(その後、それらを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の回答を参照してください。
あなたが正しいフロリンであることは間違いありません。私はこのプロジェクトに取り組んでいました、そして、このコードの断片がそれを見つけました:
product = await response.Content.ReadAsAsync<Product>();
に置き換えることができます:
response.Content = new StringContent(string product);