/ / Service vrstva ModelState neaktualizuje v .net Web API - c #, spracovanie chýb, asp.net-web-api, service-layer, asp.net-mvc-viewmodel

Servisná vrstva ModelState neaktualizuje v .net Web API - c #, spracovanie chýb, asp.net-web-api, service layer, asp.net-mvc-viewmodel

I "m implementáciu MVC riešenie, ktoré má niektoré Web API koncové body pre rôzne dátové dotazy." techniky opísané v tomto príspevku oddeliť moje otázky týkajúce sa overovania na vrstvu služieb.

Tento príspevok má a TL; DR na konci, ak chcete preskočiť na konkrétnu otázku.

Tu je môj ApiController kód:

[Authorize]
public class FriendsController : ApiController
{
private IItemService _service;

public FriendsController()
{
_service = new ItemService(new HttpModelStateWrapper(ModelState), new ViewModelRepository());
}

public FriendsController(IItemService service)
{
_service = service;
}

// GET api/friends
public IEnumerable<User> Get()
{
return _service.GetFriends(User.Identity.Name);
}


.
.
.

// POST api/friends
public void Post(Guid id)
{
var user = _service.AddFriend(User.Identity.Name, id);  // Handles error and should update ViewModel
NotificationAsyncController.AddNotification(user);
}
}

a kód pre _service.AddFriend(User.Identity.Name, id); vyzerá takto:

    public User AddFriend(string userName, Guid id)
{
try
{
return _repository.AddFriend(userName, id);
}
catch (Exception e)
{
_validationDictionary.AddError("AddFriend", e.Message);
return null;
}
}

a _validationDictionary vyzerá takto:

public class HttpModelStateWrapper : IValidationDictionary
{
private ModelStateDictionary ModelState;

public HttpModelStateWrapper(ModelStateDictionary ModelState)
{
this.ModelState = ModelState;
}

public void AddError(string key, string errorMessage)
{
if (ModelState != null)
ModelState.AddModelError(key, errorMessage);
}

public bool IsValid
{
get { return ModelState == null ? false : ModelState.IsValid; }
}
}

No, zistil som, že ak _repository.AddFriend(userName, id); chyba a _validationDictionary.AddError("AddFriend", e.Message); sa nazýva objekt ModelState, ktorý je v _validationDictionary neaktualizuje objekt ModelState, ktorý sa nachádza v FriendsController.

Inými slovami, po AddError sa nazýva ModelState v HttpModelStateWrapper nie je platný, ale akonáhle sa vráti metóda a vráti sa rozsah FriendsController, jeho ModelState sa neaktualizoval a je stále platný!

TL; DR

Ako získam objekt ModelState, ktorý som odovzdal HttpModelStateWrapper v. \ t FriendsController majú svoje zmeny odrazené v objekte ModelState objektu. \ t FriendsController?

odpovede:

0 pre odpoveď č. 1

Skončil som len tak, že som prešiel celým radičom a to mi umožnilo prístup k objektu ModelState