2016-04-21 4 views
5

Sto usando JsonPatchDocument per aggiornare i miei soggetti, questo funziona bene se il JSON si presenta come il seguenteUtilizzando API Web Net core con JsonPatchDocument

[ 
    { "op": "replace", "path": "/leadStatus", "value": "2" }, 
] 

quando creo l'oggetto si trasforma con il nodo di Operations

var patchDoc = new JsonPatchDocument<LeadTransDetail>(); 
patchDoc.Replace("leadStatus", statusId); 

{ 
    "Operations": [ 
    { 
     "value": 2, 
     "path": "/leadStatus", 
     "op": "replace", 
     "from": "string" 
    } 
    ] 
} 

se l'oggetto JSON sembra che la Patch non funzioni. Credo che ho bisogno di convertirlo utilizzando

public static void ConfigureApis(HttpConfiguration config) 
{ 
    config.Formatters.Add(new JsonPatchFormatter()); 
} 

e che dovrebbe risolvere il problema, il problema è che sto usando nucleo .net in modo non sicuro al 100% dove aggiungere il JsonPatchFormatter

risposta

0

ho creato il seguente controller di esempio che utilizza la versione 1.0 di ASP.NET Core. Se invio la richiesta JSON-Patch

[ 
    { "op": "replace", "path": "/leadStatus", "value": "2" }, 
] 

quindi dopo aver chiamato ApplyTo la proprietà leadStatus verrà modificata. Non è necessario configurare JsonPatchFormatter. Un buon post sul blog di Ben Foster mi ha aiutato molto ad acquisire una comprensione più solida - http://benfoster.io/blog/aspnet-core-json-patch-partial-api-updates

public class PatchController : Controller 
{ 
    [HttpPatch] 
    public IActionResult Patch([FromBody] JsonPatchDocument<LeadTransDetail> patchDocument) 
    { 
     if (!ModelState.IsValid) 
     { 
      return new BadRequestObjectResult(ModelState); 
     } 


     var leadTransDetail = new LeadTransDetail 
     { 
      LeadStatus = 5 
     }; 

     patchDocument.ApplyTo(leadTransDetail, ModelState); 

     if (!ModelState.IsValid) 
     { 
      return new BadRequestObjectResult(ModelState); 
     } 

     return Ok(leadTransDetail); 
    } 
} 

public class LeadTransDetail 
{ 
    public int LeadStatus { get; set; } 
} 

Spero che questo aiuti.

+0

questo lo darò un'occhiata. – R4nc1d