2017-12-26 10 views
0

Client Side-Modell (Typ Script-Datei):nicht auf dem Web-api Controller-Aktion zu schreiben Daten in der Lage FromBody Attribute

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

Server Side Modell/Klasse: Ich bin mit newtonsoft json.

Wenn ich den Json-Eigenschaft Wert in Name der Eigenschaft in Typoskript-Datei ändern, dann dieser Spaltenwert ist nicht auf UI sichtbar.

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

Web Api Contoller:

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

Server-Seite Ich bin hier die genaue Anzahl der Datensätze von Client-Seite bekommen aber mit null Eigenschaftswerte.

+1

Sie entfernen sollten zu handhaben die 'JsonProperty' everywhe re und fixiere deine Bindungen in eckig, um die Versionen ohne Leerzeichen zu verwenden. Wenn Sie 'JsonProperty' mit einem Leerzeichen hinzufügen, erwartet ASP.NET Core einen JSON-Body wie' [{"Amount": 5, "Amount Const $": "abc", "Amount LC": "xyz"}] 'aber Ihr eckiger Client sendet '[{" Betrag ": 5," BetragKonst ":" abc "," BetragLC ":" xyz "}]' stattdessen – Tseng

+0

@Tseng Ich verwende den Vertragsauflöser, um Eigenschaftsnamen in Namen in der Typoskriptdatei umzuwandeln. Pascalcase zum Kamelkasten –

Antwort

0

Um dies zu ermöglichen, sollten Sie entweder die Art ändern, wie Sie ein Clientmodell oder serverseitige Bindungen senden.

Wenn Sie das Attribut [JsonProperty] angeben, erwartet der JSON-Deserializer, dass der Name der JSON-Eigenschaft genau dem Wert von propertyName entspricht.

Für Ihren Fall des Modell Sie sollten wie diese

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

die Schnittstelle aussehen senden verwendet werden IRecord nicht, da es nicht zu einem serverseitigen Modell gebunden werden kann.

Also, haben Sie mehrere Möglichkeiten, damit es funktioniert:

  • Drop IRecord Schnittstelle und das Objekt mit der Struktur zu senden, wie oben
  • Änderung serverseitige Modell gezeigt, so dass beide Eigenschaften entsprechen Modelle
  • schreiben ein eigenes Modell Bindemittel für Records Typ (bitte check this) Ihren Fall
Verwandte Themen