MVC 5删除/排除退货模型的某些部分



我有很多[HttpPost]方法可以将数据返回到我的视图。它们看起来都像这样:

[HttpPost]
public async Task<JsonResult> NewAction(Action model)
{     
    object[] data = new object[5];
    if (ModelState.IsValid)
    {
        try
        {
            Case case = db.Cases.Find(model.Case_ID);
            model.Created = db.Users.Find(User.Identity.GetUserId());
            model.Created_date = DateTime.Now;
            model.Active = true;
            case.Actions.Add(model);
            await db.SaveChangesAsync();
            data[0] = true;
            data[1] = "Action added!";
            data[2] = model;
        }
        catch (Exception ex)
        {
            data[0] = false;
            data[3] = ex.Message;
            data[4] = ex.InnerException != null ? ex.InnerException.Message : "No details";
        }
    }
    else
    {
        string errors = string.Join("<br/>", ModelState.Values
                                .SelectMany(x => x.Errors)
                                .Select(x => x.ErrorMessage));
        data[0] = false;
        data[3] = "<b>Invalid input data</b>";
        data[4] = errors;
    }
    return Json(data, JsonRequestBehavior.AllowGet);
}

因此,在这里我返回data[2]对象中的模型,这样我就可以从中提取数据并将其放入我的表中。问题是,我必须返回Created对象才能获得UsersFirstname和LastName。但问题是Created对象是ApplicationUser对象,因此它还包括来自IdentityUser的字段,如PasswordHash、SecurityStamp等,我不想在响应中返回这些字段。

所以。。有没有一种简单的方法可以只排除/包括对象的某些部分?还是我必须创建一个新对象,并且只分配我想要返回的值?

解决这类问题的一种流行方法是创建用于表示视图所需数据的视图模型。然后使用Automapper或Value注入器之类的东西在域模型和视图模型之间进行映射(这会删除很多乏味的代码)。这种方法还可以帮助您避免过度发布/大规模分配攻击。

最新更新