您只能从请求中获取 IP 地址,因此您可以在 Action 中“获取”它
像这样的东西
[HttpPost]
public ActionResult Login(UserRegisterViewModel model) {
if(ModelState.IsValid) {
SaveLogonToAudit(model.Username);
}
return View(model);
}
private void SaveLogonToAudit(string username) {
var user = new UserAccount(username, Request.Browser.Browser, Request.Browser.Type, Request.UserHostAddress);
user.Save();
}
User 实体可以存在于另一个层中,您的 UserRegisterViewModel 将存在于 MVC UI 层中。在您的视图中拥有一个代表数据的 ViewModel 和代表您的用户实体的另一层中的一个完全独立的类是完全正常的。这是很好的设计。您的 User 实体可以在 ServiceLayer 中并具有与之关联的业务规则。然后该类将调用您的存储库层以保存其数据。
我同意 Leon Cullens 的观点,CreateDate 应该存在于 User 实体中,这就是为什么你看不到我设置它的原因。用户实体应该处理它自己的调用您的 RepositoryLayer 的 CRUD 操作。在 ctor 中设置 CreateDate 或更好的是,有一个基类,其中包含用户将在内部使用的 CreateDate、CreatedBy、LastUpdateDate、LastUpdatedBy。