Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net Opengraph-共享时自动清除缓存_Asp.net_Facebook_Facebook Graph Api_Facebook Opengraph_Httpmodule - Fatal编程技术网

Asp.net Opengraph-共享时自动清除缓存

Asp.net Opengraph-共享时自动清除缓存,asp.net,facebook,facebook-graph-api,facebook-opengraph,httpmodule,Asp.net,Facebook,Facebook Graph Api,Facebook Opengraph,Httpmodule,我在自动清除.NET应用程序中的facebook opengraph缓存时遇到问题。我希望它能像这样工作: 用户在facebook上点击分享帖子内容中的一些URL Facebook通过HttpModule重新捕获数据,我在其中注册了事件httpApp.BeginRequest+=新事件HandlerContext_BeginRequest;在哪里 Facebook分享更新内容 但事实并非如此。我测试了我的POST请求,当在单独的项目中执行时,它运行良好,我检查最后一次刮的日期,如果它是新的,我想

我在自动清除.NET应用程序中的facebook opengraph缓存时遇到问题。我希望它能像这样工作:

用户在facebook上点击分享帖子内容中的一些URL Facebook通过HttpModule重新捕获数据,我在其中注册了事件httpApp.BeginRequest+=新事件HandlerContext_BeginRequest;在哪里

Facebook分享更新内容 但事实并非如此。我测试了我的POST请求,当在单独的项目中执行时,它运行良好,我检查最后一次刮的日期,如果它是新的,我想它可以。 当我尝试使用HttpModule时,在发布我的URL后,日期并没有改变,旧的值仍然存在。我看到一些不一致的地方,因为重新强奸需要几秒钟才能完成,但在facebook上发布帖子后,旧内容会立即出现

编辑:
我发现,当链接在Facebook上共享,并且已经被刮取时,Facebook不会发出请求,因为它在缓存中。所以我上面提到的解决方案不起作用。更改数据后必须重新扫描,而不是在共享数据时。为什么每次共享URL时都要这样做?您是否尝试共享同一个URL,每次使用不同的数据?如果是这样的话,这是一个坏主意——如果你想共享个人数据,可能是用户依赖的,那么你应该使用唯一的个人URL。这是一种满足客户需求的功能。客户端经常通过CMS更改站点内容。为什么不在CMS内容更改时清除缓存呢?而不是在共享时间?大概内容共享的频率比更改的频率要高?我忘了提到客户端也会通过编辑数据库记录来更改站点的内容。问题是我无法访问用于更新记录的应用程序。
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);
             }
        }
    }
}