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

时间:2014-08-11 20:07:33

标签: c# asp.net-mvc

我有一个自定义操作过滤器,可以使用控制器中的[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()。

1 个答案:

答案 0 :(得分:3)

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

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

检查您的路线数据。 id不长。它必须是string或其他东西。

如果它是您存储为字符串的数字类型,那么您还可以使用其他选项进行转换,例如Convert.ToInt64