我在.NET应用程序中自动清除facebook opengraph缓存有问题。我希望它能像那样工作:
Facebook通过HttpModule重新刷新数据,我在其中注册了事件httpApp.BeginRequest += new EventHandler(context_BeginRequest);
其中
void context_BeginRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Request.UrlReferrer != null && HttpContext.Current.Request.Url != null)
{
var urlReferrer = HttpContext.Current.Request.UrlReferrer.ToString();
var urlDestination = HttpContext.Current.Request.Url.ToString();
if (urlReferrer.Contains("facebook"))
{
var request = (HttpWebRequest)WebRequest.Create("https://graph.facebook.com");
var postData = "id=" + urlDestination;
postData += "&scrape=true";
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
}
}
}
Facebook分享了更新的内容
但事实并非如此。我测试了我的POST请求,它在单独的项目中执行时工作正常(我检查最后一次刮除facebook debugger的日期,如果它是新的我认为没问题)。
当我尝试使用HttpModule时,在发布我的URL后 - 日期没有改变,旧值仍然存在。
我看到一些不一致,因为rescrape需要几秒钟才能完成,但是在发布后在Facebook旧内容立即出现。
编辑:
我发现,当链接在Facebook上共享并且它已经被删除时,Facebook就不会发出请求,因为它在缓存中。所以我上面提到的解决方案无效。它必须在更改数据后重新刷新 - 而不是在共享时。