2017-12-26 68 views
0

クライアント側モデル(タイプスクリプトファイル)を使用して、Web APIをコントローラアクションにデータを投稿することができません:FromBody属性

export interface IRecord { 
    id: string 
    amount: string, 
    amountConst: string, 
    amountLC: string, 
} 

サーバーサイドモデル/クラス:私はnewtonsoft JSONを使用しています。

もし私がtypescriptファイルのプロパティの名前にJsonプロパティの値を変更すると、 その列の値はUIに表示されません。

public class Records 
{ 
    [Key] 
    public string ID { get; set; } 
    [Column("Amount")] 
    [JsonProperty("Amount")] 
    public string Amount { get; set; } 

    [Column("Amount Const $")] 
    [JsonProperty("Amount Const $")] 
    public string AmountConst { get; set; } 

    [Column("Amount LC")] 
    [JsonProperty("Amount LC")] 
    public string AmountLC { get; set; } 
} 

ウェブアピContoller:

[HttpPost] 
[Route("Export")] 
[ActionName("Export")] 
public FileResult Export([FromBody]List<Records> Record) 
{ 
    try 
    { 
    } 
} 

サーバー側私はクライアント側 からではなく、ヌルのプロパティ値を持つレコードの正確な数を取得しています。

+1

を処理するためにRecordsタイプ(下さいcheck this)のカスタムモデルバインダーを書くあなたは 'JsonProperty' everywheを削除する必要がありますスペースを入れずにバージョンを使用するために、あなたのバインディングを角度で修正してください。 'JsonProperty'にスペースを追加すると、ASP.NET Coreは' [{"Amount":5、 "Amount Const $": "abc"、 "Amount LC": "xyz"}] 'のようなjsonボディを期待します。 – Tseng

+0

@Tsengプロパティリゾルバを使用してプロパティ名をTypescriptファイルの名前に変換していますが、パスカルケースからキャメルケースへ –

答えて

0

クライアントモデルまたはサーバー側のバインディングを送信する方法を変更する必要があります。

[JsonProperty]属性を指定すると、JSONデシリアライザは、JSONプロパティ名がpropertyName引数の値とまったく同じになることを想定しています。

あなたのケースのためにあなたが送っモデルは、この

[{ 
    "ID": "11", 
    "Amount": "1", 
    "Amount Const $": "1.0", 
    "Amount LC": "aaa" 
}] 

のように、それは、サーバー側のモデルにバインドすることができませんでしたので、使用することはできませんIRecordインターフェースになります。

だから、あなたはそれを動作させるには、いくつかのオプションがあります。

  • ドロップIRecordインタフェースをして
  • 変更、サーバー側モデルの上に示すように、両モデルのプロパティが
  • に一致するような構造を持つオブジェクトを送信
  • あなたのケース