2016-07-19 28 views
5

Asp.net core webAPi ve EF core üzerinde çalışıyorum ve "update" işlemini (kısmen varlıkları düzenleyin) uygulamak istiyorum. Ben bununla başa çıkmak için doğru yol aradım ve jsonPatch kullanmalıyım gördüm. Sorun benim API üzerinden sadece DTOs maruz değilim, ve olmasıdır ben gibi jsonPatch kullanırsanız:PATCH DTO ile çalışırken

public AccountDto Patch(int id, [FromBody]JsonPatchDocument<AccountDto> patch) 

sonra DTO üzerinde yama uygulamak gerekir ve manken varlık üzerinde uygulayamazsınız, yeni bir varlık yaratmadan.

Ayrıca Odata.Delta hakkında okudum, ama hala asp.net çekirdek üzerinde çalışmaz ve daha fazlası - Ben dto ile çalışmak için bir çözüm yerleşik olduğunu sanmıyorum (Ben Odata zaman yardımcı olabilir this example bulundu çekirdek için kullanılabilir)

Öyleyse, şimdilik - POST kullanmalı ve DTO'yu sorgudaki değiştirilen özelliklerin listesiyle birlikte göndermeliyim (here'u gördüğüm gibi), Veya - daha şık bir çözüm var mı?

Teşekkürler! Sadece JsonPatchDocument dan türünü kaldırmak ve o tip olmadan çalışabilir gördü

Sonunda

cevap

1

Şimdi autoMapper kullanarak bunu sadece

CreateMap<JsonPatchDocument<AccountDTO>, JsonPatchDocument<Account>>(); 
     CreateMap<Operation<AccountDTO>, Operation<Account>>(); 
yapabilirken gördüm

ve bir çekicilik gibi çalışıyorum :)

0

...

[HttpPatch("{id}")] 
    public AccountDTO Patch(int id, [FromBody]JsonPatchDocument patch) 
    { 
     return _mapper.Map<AccountDTO>(_accountBlService.EditAccount(id, patch)); 
    } 

Ve sonra, BL katmanında,

public Account EditAccount(int id, JsonPatchDocument patch) 
    { 
     var account = _context.Accounts.Single(a => a.AccountId == id); 
     var uneditablePaths = new List<string> { "/accountId" }; 

     if (patch.Operations.Any(operation => uneditablePaths.Contains(operation.path))) 
     { 
      throw new UnauthorizedAccessException(); 
     } 
     patch.ApplyTo(account);    
     return account; 
    } 
+0

Bunu kullanırsanız, ModelState 'patch.ApplyTo (accountToTestValidation, ModelState); – arielorvits

+0

ancak yine de yamanan nesne doğrulamasını 'patch.ApplyTo (yamalı) ile el ile kontrol edebilirim; TryValidateModel (yamalı); ' – arielorvits

İlgili konular