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().

ActionFilter中奇怪的无效强制转换异常

不是这样的,错误在一行,这里

long? ID = (long?)routeData.Values["id"];

检查你的路由数据。id不长。它必须是一个string或甚至其他的东西。

如果它是一个数字类型,你存储为一个字符串,那么你有其他的选项来转换它,如Convert.ToInt64