I've had a go myself and come up with:
var leftOverValue = leftOverItem.Value;
var defaultValue = Defaults[leftOverItem.Key];
var leftOverValueString = leftOverValue as string;
var defaultValueString = defaultValue as string;
if (leftOverValueString != null &&
defaultValueString != null)
{
if (string.Compare(leftOverValueString,
defaultValueString, StringComparison.InvariantCultureIgnoreCase) == 0)
{
continue;
}
}
if ((leftOverValue == null || defaultValue ==
null) && (leftOverValue != defaultValue)
|| (leftOverValue != null && !
leftOverValue.Equals(defaultValue)))
{
return PathMatch.Failure(route,
string.Format("The route was a close match, but the value of the '{0}'
parameter was expected to be '{1}', but '{2}' was provided instead.",
key, defaultValue, leftOverValue));
}
It seems to do the trick. I'll update if anything goes wrong...