用于用户名和日期的asp.net mvc模型绑定

本文关键字:net mvc 模型 绑定 asp 用户 日期 用于 | 更新日期: 2023-09-27 17:57:41

我的项目中有一个日志控制器,它从javascript客户端获取日志数据并发送到服务器。

日志模型是这样的。

public class Log
{
    public string Event { get; set; }
    public string Message { get; set; }
    public DateTime Date { get; set; }
    public string Username { get; set; }
}

我的控制器动作是这样的。

    [HttpPost]
    public JsonResult Save(Log log)
    {
        log.Username = User.Identity.Name;
        log.Date = DateTime.now;
        return Json(new { message = "ok" }, JsonRequestBehavior.AllowGet);
    }

当用户发送日志数据时,我需要设置用户名和日期。模型绑定还有其他方法吗?自动设置日志的context.username和日期时间。

用于用户名和日期的asp.net mvc模型绑定

IModelBinder是首选方式。您实现接口并将其注册在Global.asax文件中

ModelBinders.Binders.Add(typeof(Log), new LogModelBinder());

我不喜欢这种方法的地方在于,你必须意识到,在某个地方实现了一个用于这种类型的自定义模型绑定器,如果你忘记了它,或者你有一个新的开发人员在处理这个项目,而模型开始表现得很奇怪,它可能会引起混乱。只是还不够清楚是什么在改变这个物体。

我喜欢在控制器中实现所有自定义逻辑。您可以覆盖OnActionExecuting并在那里注入属性,更好的是,拥有一个所有控制器都继承的BaseController,并在其中执行自定义逻辑。

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    object model = filterContext.ActionParameters
                                .TryGetValue("model", out model) 
                                ? model : null;
    if (model != null)
    {
        var logModel = model as Log;
        if (logModel != null)
        {
            logModel.Date = DateTime.Now;
            logModel.Username = filterContext.HttpContext.User.Identity.Name;
        }
    }
}