1. ホーム
  2. asp.net

[解決済み] ASP.NET Web APIがプレーンテキストを返すように強制する方法はありますか?

2022-07-07 19:36:04

質問

ASP.NET Web APIコントローラから、プレーンテキストで応答を返す必要があります。

私は Accept: text/plain でリクエストしてみましたが、うまくいかないようです。 その上、リクエストは外部であり、私のコントロールから外れています。私が達成したいことは、古いASP.NETの方法を模倣することです。

context.Response.ContentType = "text/plain";
context.Response.Write("some text);

何かアイデアはありますか?

EDIT、解決策 : Aliostad さんの回答を元に、以下のように WebAPIContrib のテキストフォーマッターを追加し、Application_Startで初期化しました。

  config.Formatters.Add(new PlainTextFormatter());

といった具合に、私のコントローラはこんな感じになりました。

[HttpGet, HttpPost]
public HttpResponseMessage GetPlainText()
{
  return ControllerContext.Request.CreateResponse(HttpStatusCode.OK, "Test data", "text/plain");
}

どのように解決するのですか?

うーん...。カスタムフォーマッターを作成する必要はないでしょう。代わりに、このようなコンテンツを返します。

    [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;
    }

これは、カスタムフォーマッターを使わなくても動作します。

もし明示的に出力を作成し、Accept ヘッダに基づいた デフォルトのコンテントネゴシエーションを上書きしたい場合には Request.CreateResponse() を使いたくないでしょう。

代わりに、明示的に新しい HttpResponseMessage を作成し、コンテンツを手動で割り当てます。上の例では StringContent を使用していますが、様々な.NETデータ型/構造体からデータを返すために、他にもかなり多くのコンテンツクラスが利用可能です。