I expect you knew this already, but a Dictionary<TKey, TValue> is only thread-safe for multiple readers if there's a single writer and the dictionary is not being enumerated.  If there are multiple writers or for enumeration, it's not thread-safe (http://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx).  It's definitely possible to have multiple writers since each new request with a unique type and set of limits generates a write.  I realize I put the dictionary access outside of the lock scope so I think just moving the return into that scope should be sufficient unless you think using ConcurrentDictionary is the best solution