2017-12-11 1 views
0

Ich habe ein Problem mit der Übergabe von 2 Parametern an meine [HttpPut] Methode. Sie sind beide mit [FromBody] Attribut gekennzeichnet und sie sind beide Nullen, wenn ich diese Methode mit Postman testen. Der Controller reagiert korrekt, indem er mich in die Methode einbindet, aber ich weiß nicht, wie ich einen korrekten JSON-Body schreiben soll, um die richtige Antwort zu erhalten. Ich weiß nicht, ob das der richtige Weg ist, 2 Paramter zu passieren, die mit markiert sind oder wenn es überhaupt möglich ist. Im Allgemeinen möchte ich mein BitPosition Objekt aktualisieren, indem ich ein altes übergebe und es zu einem neuen vertausche. Kannst du helfen ?Aktion mit doppelten [FromBody] Parametern

[HttpPut] 
public async Task<IActionResult> UpdateBitPosition([FromBody]BitPosition oldBitPosition, [FromBody]BitPosition newBitPosition) 
{ 
    if (oldBitPosition == null || newBitPosition == null) 
    { 
     return BadRequest(); 
    } 

    try 
    { 
     var bitPositionToUpdate = await _context.BitPositions.FirstOrDefaultAsync(bp => bp.IDPermission == oldBitPosition.IDPermission && 
                         bp.Position == oldBitPosition.Position); 

     if (bitPositionToUpdate == null) 
     { 
      return NotFound(); 
     } 

     bitPositionToUpdate.IDPermission = newBitPosition.IDPermission; 
     bitPositionToUpdate.Position = newBitPosition.Position; 

     _context.BitPositions.Update(bitPositionToUpdate); 
     await _context.SaveChangesAsync(); 
     return new NoContentResult(); 
    } 
    catch (Exception ex) 
    { 
     Helpers.ExceptionLogger.LogException(ex); 
     return StatusCode(500); 
    } 
} 
+1

Hallo .. Können Sie Ihre 2 Objekte in einem WRAP? ..so etwas wie: öffentliche Klasse BitVM {public BitPosition oldBitPosition {get; set;}, public BitPosition newBitPosition {get; set;}} .... und dann übergeben Sie es als Nutzlast Ihrer HttPut-Methode? like ([FromBody] BitVM Bit) –

+2

FromBody kann nur einmal in Aktionsparametern verwendet werden. Wie bereits vorgeschlagen, müssten Sie die beiden Modelle in einem Stammmodell zusammenführen, damit die Modelle korrekt binden können. https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding#binding-formatted-data-from-the-request-body – Nkosi

+0

lesen Sie zuerst die Dokumentation, bevor Sie eine Frage stellen –

Antwort

3

Nach documentation

"Es kann pro Aktion höchstens ein Parameter sein, dekoriert mit [FromBody]"

Also, ich schlage vor, Sie die Objekte so zu verschmelzen;

public class MergedBitPosition 
{ 
    public BitPosition OldBitPosition { get; set; } 

    public BitPosition NewBitPosition { get; set; } 
} 

Und die Methode sieht aus wie;

public async Task<IActionResult> UpdateBitPosition([FromBody]MergedBitPosition mergedBitPosition) 

Beispiel Json Anfrage sollte so sein;

{ 
    "OldBitPosition":{ 
     "IdPermission":8, 
     "Position":1 
    }, 
    "NewBitPosition":{ 
     "IdPermission":8, 
     "Position":5 
    } 
} 
+0

danke für die Antwort. Wie würde ein JSON-Beispiel für die 'MergedBitPosition'-Klasse aussehen? Ich versuche dies: '[ \t "OldBitPosition": { "IdPermission": 8, "Position": 1 } \t "NewBitPosition": { "IdPermission": 8, " Position ": 5 } ]' aber es funktioniert nicht. –

Verwandte Themen