Я нашел решение своей проблемы. Request.Scheme в этом контексте не HttpRequest , а IOwinRequest .
. Его можно переопределить глобально в файле Startup.cs:
app.Use((context, next) =>
{
context.Request.Scheme = context.Request.GetRealScheme(true);
return next();
});
где GetRealScheme () - это мой метод расширения:
private const string HeaderProtoKey = "X-Forwarded-Proto";
public static string GetRealScheme(this IOwinRequest request, bool skipPostfix = false)
{
if (request == null)
return null;
string headerProtocol = request.Headers[HeaderProtoKey] ?? string.Empty;
string result = headerProtocol.ToLower().Contains("https")
? "https://"
: request.Scheme;
return skipPostfix
? result.Replace("://", string.Empty)
: result;
}
Одна важная вещь, на которую следует обратить внимание!
Этот код должен применяться ДО Настройка аутентификации.