我正在使用HttpClient
与API对话。如果启用,服务器将自动将http://
个请求重定向到https://
。因此,为了保护用户API密钥,我想创建一个到网站的测试连接,以便在通过API密钥发送之前查看我是否被重定向。
HttpClient
正确重定向,但我似乎无法找到一个合适的方法来确定客户端是否使用HTTPS。我知道我可以测试https://
中response.RequestMessage.RequestUri
是否存在,但这看起来有点不稳定
public void DetectTransportMethod()
{
using (HttpClient client = new HttpClient())
{
client.Timeout = TimeSpan.FromSeconds(20);
using (HttpResponseMessage response = client.GetAsync(this.HttpHostname).Result)
{
using (HttpContent content = response.Content)
{
// check if the method is HTTPS or not
}
}
}
}
答案 0 :(得分:1)
HttpClient
(MSDN)和HttpResponseMessage
(MSDN)的文档不包含任何可用于确定是否已通过https发出请求的方法。即使检查HttpResponseMessage
的URI确实听起来确实很糟糕,我担心它是最简单和最易读的选项。将此作为HttpResponseMessage
的扩展方法实现可能是最具可读性的。为确保可以重定向您正在使用的HttpClient
,请确保传递到WebRequestHandler
的{{1}}(MSDN)具有HttpClient
({{3 }})属性设置为true。
请参阅以下扩展方法:
AllowAutoRedirect
以下控制台应用程序演示它的工作原理。但是,要使其工作,HTTP服务器必须将连接升级到https(就像Facebook一样),并且static class Extensions
{
public static bool IsSecure(this HttpResponseMessage message)
{
rreturn message.RequestMessage.RequestUri.Scheme == "https";
}
}
的{{1}}属性必须设置为AllowAutoRedirect
。
WebRequestHandler