6

基本的なセットアップは次のとおりです。次のようなポスト関数を備えたasp.netコアwebapiコントローラー(c#)があります。

[HttpPost]
public ActionResult<string> Post([FromBody] string Name)
{
     //Do some processing with the "Name" argument...
     return Ok( "Success!" );
}

次の生の JSON リクエスト本文をこの関数に送信しようとしています。

{
    "Name": "Foo"
}

しかし、上記の本文でこの関数にポスト リクエストを送信すると、サーバー コンソールに次のエラーが返されます。

「ObjectResult を実行し、型 'Microsoft.AspNetCore.Mvc.SerializableError' の値を書き込んでいます」

そして、クライアント側のこのエラー

{ "": [ "値の解析中に予期しない文字が検出されました: {。パス ''、行 1、位置 1。" ] }

関数の先頭にブレークポイントを設定しようとしましたが、トリガーすらしません! シリアル化可能エラーが発生するのはなぜですか?

4

2 に答える 2

13

シリアライズ可能エラーは実際には JSON.NET からの解析エラーですが、問題は実際には JSON の解析とは何の関係もありません。

本当の問題は、ASP.NET Core が JSON 本体をオブジェクト/DTO に解析することを想定していることです。したがって、問題を解決するために使用できる 2 つのオプションがあります。

  1. 単一のパラメーターに対して単純な DTO コンテナー オブジェクトを作成します。

    public class SimpleObject { 
        public string Name { get; set; } 
    }
    
  2. リクエスト本文で本格的な JSON オブジェクトを渡す代わりに、次のような単純な文字列を使用します。"My parameter string"

于 2018-08-29T04:51:28.263 に答える