在ASP.NET MVC WEB API中从存储库层返回更新状态的最佳方法

时间:2013-02-22 06:56:15

标签: asp.net-web-api

我正在使用带有Entity Framework和Backbone.js的ASP.NET Web API

我正在开发一个更新模块,允许用户更新他的XYZ。

现在,更新时可能会发生3种情况

  • 成功
  • 失败
  • 未找到

所以我决定使用这个名为

的枚举
enum UpdateStatus
{
    Success = 1,
    Failed = 0,
    NotFound = 2
}

所以这就是我的方法看起来像

public UpdateStatus UpdateXYZ(Model model)
{
    var data = _repo.Table.where(m => m.id == model.id);
    if(data.count == 0)
    {
        return UpdateStatus.NotFound;
    }

    try
    {
        // update here
        return UpdateStatus.Sucess; 
    }
    catch
    {
        // log errors
        return UpdateStatus.Failed;
    }
}

然后在服务层中,我会将相同的值返回到我的web api操作。然后在网络API动作中,我会有类似......

public HttpResponseMessage Put(Details details)
{
    if (ModelState.IsValid)
    {
        //The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent.
        //return new HttpResponseMessage(HttpStatusCode.ResetContent);
        UpdateStatus = _magicService.UpdateXYZ(details);
        if (UpdateStatus.Success)
        {
            return new HttpResponseMessage(HttpStatusCode.NoContent);
        }
        else if(UpdateStatus.NotFound)
        {
            return new HttpResponseMessage(HttpStatusCode.Gone);
        }
        return new HttpResponseMessage(HttpStatusCode.Conflict);
    }
    else
    {
        string messages = string.Join("; ", ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage + " - " + (x.Exception == null ? "" : x.Exception.Message)));
        return Request.CreateResponse<string>(HttpStatusCode.BadRequest, messages.ToString());
    } 

}   

我已在我的repo层中定义了UpdateStatus枚举,并且也在Service和Web层中使用它。想对这种方法有什么看法,还是有其他办法可以做到这一点?

请分享您的想法。

1 个答案:

答案 0 :(得分:1)

只要您的域模型没有离开您应该使用视图模型的Web API边界,就可以了。