改变webclient响应时间

时间:2013-03-27 08:19:17

标签: c# asp.net facebook webclient

我想在我的网站上使用facebook like button。因为我的大多数访客来自伊朗,而且facebook在伊朗被过滤,如果有人来自伊朗,那么类似的按钮会被过滤,页面变得非常难看。我想要阻止这是使用webclient尝试连接到Facebook。如果成功,我会放置类似按钮,否则我不会:

string fb_result="failed";
WebClient webclient= new  WebClient();
try{
fb_result=webclient.DownloadString("http://www.fabebook.com");
}
catch{
 fb_result="failed"; //if its being filtered exception is raised
}

在我的HTML中:

<%if(fb_result)!="failed"){%>
<div id="fb-root"></div>
<script>(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) return;
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
<div class="fb-like" data-href="http://www.mysite.com" data-send="true" data-width="450" data-show-faces="true"></div>
<%}%>

这很好但问题是,当webclient无法连接时,需要花费很多时间来引发错误。是否有任何方法可以让webclient尝试更短的时间,如果不能连接,可以更快地提高错误。

顺便说一句,任何其他方法来检查是否可以连接到Facebook是可能的。因为这可能不是检查它的唯一方法。

1 个答案:

答案 0 :(得分:1)

正如我在评论中所述,您编写的WebClient代码将无法正常运行,因为它在服务器上执行,因此它将尝试使用您的网络服务器连接连接到Facebook,这将始终成功(除非你的webhost离线了。)

最好的方法是在页面加载到浏览器时发出一个AJAX请求。它应该在Facebook上请求已知资源(例如他们的主页或“赞”图像本身)。然后,当且仅当响应符合预期时,您的AJAX响应处理程序才会加载其余的Facebook客户端脚本。如果您通过请求Like图像进行测试,那么您只需要检查响应的内容类型(即确保它是image/png);如果响应具有非200状态代码或请求超时,则您不加载Facebook脚本。