C# 服务层ModelState未在.net Web API中更新

C# 服务层ModelState未在.net Web API中更新,c#,error-handling,asp.net-web-api,service-layer,asp.net-mvc-viewmodel,C#,Error Handling,Asp.net Web Api,Service Layer,Asp.net Mvc Viewmodel,我正在实现一个MVC解决方案,它有一些用于各种数据查询的WebAPI端点。我使用将我的验证关注点分离到服务层 这个帖子有一个TL;如果您想跳到特定问题,请在结尾处添加DR 这是我的ApiController代码: [Authorize] public class FriendsController : ApiController { private IItemService _service; public FriendsController() { _

我正在实现一个MVC解决方案,它有一些用于各种数据查询的WebAPI端点。我使用将我的验证关注点分离到服务层

这个帖子有一个TL;如果您想跳到特定问题,请在结尾处添加DR

这是我的
ApiController
代码:

[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);
    }
}
\u validationDictionary
看起来是这样的:

    public User AddFriend(string userName, Guid id)
    {
        try
        {
            return _repository.AddFriend(userName, id);
        }
        catch (Exception e)
        {
            _validationDictionary.AddError("AddFriend", e.Message);
            return null;
        }
    }
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; }
    }
}
我发现如果
\u repository.AddFriend(用户名,id)
抛出一个错误并
\u validationDictionary.AddError(“AddFriend”,e.Message),则
\u validationDictionary
中的ModelState对象不会更新驻留在
FriendsController
中的ModelState对象

换句话说,在调用
AddError
之后,
HttpModelStateWrapper
中的ModelState无效,但是一旦该方法返回并且范围返回到
FriendsController
,它的ModelState就没有更新并且仍然有效

TL;博士
如何获取已传递到
FriendsController
的ctor中的
HttpModelStateWrapper
的ModelState对象,并将其更改反映在
FriendsController的ModelState对象中?

我最终只传递了整个控制器,这使我能够访问ModelState对象