我有一个自定义操作过滤器,可以使用控制器中的[Log]属性自动记录用户操作。我在多个应用程序中使用了相同的设置,所以我知道它有效,但这次它失败了,我无法弄清楚原因。
public override void OnResultExecuted(ResultExecutedContext thisContext)
{
LogTrace(thisContext.RouteData);
}
public void LogTrace(RouteData routeData)
{
MyContext db = new MyContext();
TimeSpan Duration = (DateTime.Now - StartTime);
string Controller = ReadableController((string)routeData.Values["controller"]);
string Action = (string)routeData.Values["action"];
long? ID = (long?)routeData.Values["id"];
LogFile log = new LogFile();
log.UserID = User.ID;
log.Controller = Controller;
log.Action = Action;
log.ItemID = ID;
log.Timestamp = DateTime.Now;
log.Duration = Duration;
db.LogFiles.Add(log);
db.SaveChanges();
}
我指定的演员表无效'在LogFile log = new LogFile()。
答案 0 :(得分:3)
不是这样,错误是一行,在这里:
long? ID = (long?)routeData.Values["id"];
检查您的路线数据。 id
不长。它必须是string
或其他东西。
如果它是您存储为字符串的数字类型,那么您还可以使用其他选项进行转换,例如Convert.ToInt64
。