 <p>Ultimately, to get around this, I had to use <code>request.ServerVariables["HTTP_URL"]</code> and some manual parsing, with a bunch of error-handling fallbacks (additionally compensating for some related glitches in <code>Uri</code>). Not great, but only affects a tiny minority of awkward requests.</p>