Gathering tokens from ASP.NET routes
In GetIdAndKeys(), you do the default initialization of the out variables just before the default return.  I find it is usually better to initialize these variables at the top of the method because many methods will have multiple early return conditions, as well as a default return value.  Doing the default initialization at the beginning of the method prevents needing to do it in multiple places, and aids in consistency if the specific method does not have this problem.

public static bool GetIdAndKeys(RouteValueDictionary dataTokens, out int id, out Dictionary&lt;string, string&gt; keys)
{
    id = 0;
    keys = null;

    if (dataTokens.Count &gt; 0)
    {
        // re-assign and return
    }

    return false;  // use default values
}