ASP.NET Web API にプレーンテキストを返すように強制する方法はありますか? 質問する

ASP.NET Web API にプレーンテキストを返すように強制する方法はありますか? 質問する

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 データ型/構造からデータを返すために使用できるコンテンツ クラスは他にも多数あります。

おすすめ記事