Just done a bit of reflectoring in RouteCollection.ValidateRoute(). There is nothing in there to test Headers
firstly, it has to be a string, i throws if it isn't. (so you can't pass in a Regex to overcome the case sensitivity.)
secondly, it tests to see in the name of the parameter equals "method" and it tests this as a comma separated list of method names, NOT as a regular expression! so "GET,POST" not "GET|POST"
thirdly it checks anything in the RouteData (which is anything matched in the Url and any Defaults specified.)
Nothing to do with Headers yet.