私はかなり単純な間違いをしました。Fiddlerで、POSTを作成しました。「FileFullpath」で、2つではなく1つの円記号を使用したことに注意してください。
私のWebAPIモデルは次のように定義されています...
public class GTMetadataModel
{
public int Id { get; set; }
public string ComputerId { get; set; }
public string UserId { get; set; }
public string FileFullpath { get; set; }
public string Version { get; set; }
public string[] Categories { get; set; }
public double[] Scores { get; set; }
}
私のWebAPIコントローラーは次のように定義されています...
public HttpResponseMessage PostGTMetadata(GTMetadataModel newentry)
{
... // handle null parameter and return error here.
var response = Request.CreateResponse<GTMetadataModel>(HttpStatusCode.Created, newentry);
return response;
}
WebAPIを実行してFiddlerPOSTを送信すると、「newentry」がnullになります。2つの円記号が必要であることに気付くまでに少し時間がかかりました。2つに変更したところ、「newentry」が正しかった。
したがって、明らかに問題は提供された不良データでしたが、サーバー側のコードのどこでどのように不良Jsonデータを検出できますか?
更新:マークの回答が受け入れられます。参照されている投稿は、堅牢でエレガントなアプローチの良い例だからです。ただし、簡単な答えが必要な場合は、参照されている投稿で「this.ModelState」を使用して、解析されたデータの問題を特定します。次のコードをPostハンドラーメソッドに追加できます(おそらく、Markが参照する回答から何かを適応させます)。
if(ModelState.IsValid == false)
{
var errors = ModelState
.Where(s => s.Value.Errors.Count > 0)
.Select(s => s.Key + ": " + s.Value.Errors.Select(t=>t.Exception.Message).Aggregate((a,b) => a + "\n" + b))
.Aggregate((a, b) => a + "\n" + b);
Debug.Print(errors);
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, errors);
}
アクションフィルターを使用して、不正な要求を傍受できます。
質問「ASP.NETWebAPIモデルバインダーのパラメーターの検証」を参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加