/ / Warstwa usługi ModelState nie aktualizuje się w .NET Web API - c #, obsługa błędów, asp.net-web-api, service-layer, asp.net-mvc-viewmodel

Warstwa usługowa ModelState nie aktualizuje się w API sieci .net - c #, obsługa błędów, asp.net-web-api, warstwa serwisowa, asp.net-mvc-viewmodel

Wdrażam rozwiązanie MVC, które ma pewne punkty końcowe interfejsu API sieci Web dla różnych zapytań o dane. Używam techniki opisane w tym poście aby oddzielić moje wątpliwości związane z weryfikacją od warstwy usług.

Ten post ma TL; DR na koniec, jeśli chcesz przejść do konkretnego pytania.

Tutaj jest mój ApiController kod:

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

i kod dla _service.AddFriend(User.Identity.Name, id); wygląda tak:

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

I _validationDictionary wygląda tak:

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

Cóż, dowiedziałem się, że jeśli _repository.AddFriend(userName, id); zgłasza błąd i _validationDictionary.AddError("AddFriend", e.Message); nazywa się obiekt ModelState, który jest w _validationDictionary nie aktualizuje obiektu ModelState, który znajduje się w FriendsController.

Innymi słowy, po AddError nazywa się ModelState w HttpModelStateWrapper nie jest poprawny, ale po zwróceniu tej metody i zwróceniu zakresu do FriendsController, jego ModelState nie został zaktualizowany i nadal jest ważny!

TL; DR

Jak uzyskać obiekt ModelState, który przekazałem do HttpModelStateWrapper w ctor z FriendsController zmiany mają odzwierciedlenie w obiekcie ModelState obiektu FriendsController?

Odpowiedzi:

0 dla odpowiedzi № 1

Skończyło się na tym, że przekazałem cały kontroler, co dało mi dostęp do obiektu ModelState