web-dev-qa-db-ja.com

ASP.NET Core 2.0 Web Apiで「生の」jsonを返す

ASP.NET Core Web Apiでデータを返すAFAIKの標準的な方法は、IActionResultを使用して、たとえばOkObjectの結果。これはオブジェクトでは問題なく機能しますが、何らかの方法でJSON文字列を取得し、そのJSONを呼び出し元に返したい場合はどうなりますか?

例えば.

public IActionResult GetSomeJSON()
{
    return Ok("{ \"name\":\"John\", \"age\":31, \"city\":\"New York\" }");
}

ここでASP.NET Coreが行うことは、JSON文字列を取得し、それを再びJSONにラップします(たとえば、JSONをエスケープします)

[Produces("text/plain")]でプレーンテキストを返すことは、「RAW」コンテンツを提供することで機能しますが、応答のコンテンツタイプをJSONではなくPLAINに設定します。コントローラーで[Produces("application/json")]を使用します。

エスケープされずに、通常のJSONコンテンツタイプとして持っているJSONを返すにはどうすればよいですか?

注:JSON文字列がどのように取得されたかは関係ありません。サードパーティサービスからのものである可能性があります。または、デフォルトのJSON.NETを使用する代わりにカスタムシリアル化を行うために、特別なシリアル化の必要性がありますシリアライザー

26
MichelZ

そしてもちろん、質問を投稿してから数分後、私は解決策を見つけました:)

コンテンツタイプapplication/jsonContentを返すだけです...

return Content("{ \"name\":\"John\", \"age\":31, \"city\":\"New York\" }", "application/json");
42
MichelZ

アクションで、Ok()Content()メソッドに置き換えます。これにより、応答のコンテンツ(未処理コンテンツ)、コンテンツタイプ、およびステータスコードを設定できます。 https:// docs。 Microsoft.com/en-us/dotnet/api/Microsoft.aspnetcore.mvc.contentresult?view=aspnetcore-2.

17
Arash Motamedi