ASP.NET Web API コントローラーからプレーンテキストで応答を受け取る必要があります。
リクエストを実行しようとしましたAccept: text/plain
が、うまくいかないようです。また、リクエストは外部からのものであり、私の制御外です。私が実現したいのは、古い ASP.NET の方法を模倣することです。
context.Response.ContentType = "text/plain";
context.Response.Write("some text);
何か案は?
編集、解決策: Aliostadさんの回答に基づいて、WebAPIコントリビュートテキストフォーマッタは、Application_Start で初期化されます。
config.Formatters.Add(new PlainTextFormatter());
そして私のコントローラーは次のようになりました:
[HttpGet, HttpPost]
public HttpResponseMessage GetPlainText()
{
return ControllerContext.Request.CreateResponse(HttpStatusCode.OK, "Test data", "text/plain");
}
ベストアンサー1
うーん...これを機能させるためにカスタムフォーマッタを作成する必要はないと思います。代わりに、次のようなコンテンツを返します。
[HttpGet]
public HttpResponseMessage HelloWorld()
{
string result = "Hello world! Time is: " + DateTime.Now;
var resp = new HttpResponseMessage(HttpStatusCode.OK);
resp.Content = new StringContent(result, System.Text.Encoding.UTF8, "text/plain");
return resp;
}
これは、カスタムフォーマッタを使用せずに機能します。
Request.CreateResponse()
明示的に出力を作成し、Accept ヘッダーに基づいてデフォルトのコンテンツ ネゴシエーションをオーバーライドする場合は、MIME タイプを強制するため使用しないでください。
代わりに、明示的に新規作成しHttpResponseMessage
、コンテンツを手動で割り当てます。上記の例では を使用していますStringContent
が、さまざまな .NET データ型/構造からデータを返すために使用できるコンテンツ クラスは他にも多数あります。