ActionFilter中奇怪的无效强制转换异常
本文关键字:转换 异常 无效 ActionFilter | 更新日期: 2023-09-27 18:17:35
我有一个自定义动作过滤器,它将在我的控制器中使用[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();
}
我得到'指定的cast是无效的' LogFile log = new LogFile().
不是这样的,错误在一行,这里
long? ID = (long?)routeData.Values["id"];
检查你的路由数据。id
不长。它必须是一个string
或甚至其他的东西。
如果它是一个数字类型,你存储为一个字符串,那么你有其他的选项来转换它,如Convert.ToInt64