我正在尝试使用facebook在asp.net web api2项目中实现外部身份验证。
我使用的Microsoft.Owin.Security.Facebook
包的版本是3.0.1。
这些步骤很好:
之后,中间件应该调用facebook tokenEndpoint, https://graph.facebook.com/oauth/access_token,获取访问令牌。
但我得到一个socketException:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败
所以我试图在控制台应用程序中模仿对facebook tokenEndpoint(带HttpClient.GetAsync
)的调用。
我收到了代理错误,我通过在WebRequestHandler
中指定代理来解决:
var proxy = WebRequest.DefaultWebProxy;
proxy.Credentials = CredentialCache.DefaultCredentials;
HttpClient httpclient = new HttpClient(new WebRequestHandler { Proxy = proxy });
//GetAsync OK with the use of the current system proxy
var result = RunSync(() => httpclient.GetAsync("https://graph.facebook.com/oauth/access_token"));
最后,我在我的应用程序的FacebookAuthenticationOptions
中报告了代理设置,但错误仍然存在。
我不知道为什么调用在控制台应用程序中工作,而不是在Web应用程序中工作。 我试图比较两个应用程序之间的HttpClient状态,但我发现并不多。
是否有人知道问题的原因是什么?
答案 0 :(得分:0)
WebRequest.DefaultWebProxy
的行为在我的控制台应用程序和我的Web应用程序之间并不相同,尽管在app.config或web.config中没有声明代理。
我在msdn中读到如果在应用程序配置中找不到代理,
WebRequest.DefaultWebProxy
将使用系统默认代理。
控制台应用程序就是这种情况,但Web应用程序则不然。
要在Web应用程序中使用系统代理,我必须专门使用WebRequest.GetSystemWebProxy()
。
这解决了我在开发环境中访问facebook tokenEndpoint的问题。
我不知道WebRequest.DefaultWebProxy
在我的网络应用程序中返回的代理来自哪里。