ASP.NET中的Facebook频道文件

本文关键字:频道 文件 Facebook 中的 NET ASP | 更新日期: 2023-09-27 18:23:36

根据facebook的Javascript SDK,facebook应用程序应该在其init代码中包含"通道文件"。如下所示:http://developers.facebook.com/docs/reference/javascript/

我不完全理解他们为什么需要,或者文件的内容应该是什么,但我只是用他们的基本示例,因为它可能在一些特定问题上有所帮助。

我的问题是,他们说应该缓存这个"channel.html"文件。甚至给出了一个如何用PHP缓存它的例子:

 <?php
 $cache_expire = 60*60*24*365;
 header("Pragma: public");
 header("Cache-Control: max-age=".$cache_expire);
 header('Expires: ' . gmdate('D, d M Y H:i:s', time()+$cache_expire) . ' GMT');
 ?>

问题是,AFAIK,这是用asp.net无法完成的,因为我无法将c#代码放在html文件中。

所以与此同时,我只是添加了硬编码,比如:

<head>
    <meta http-equiv="cache-control" content="max-age=31536000;public" />
    <meta http-equiv="expires" content="31536000" />  
</head>

我不确定这样做是否正确,因为"过期"应该以特定的日期格式给出。

有什么想法吗?我该怎么做?也许我可以为facebook提供channel.aspx服务?

ASP.NET中的Facebook频道文件

以下是您如何通过以下链接在asp.net中实现这一点:

  1. 创建通用HTTP处理程序(ashx文件):

    public class FacebookChannel : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            HttpResponse response = context.Response;
            response.ClearHeaders();
            const int cacheExpires = 60 * 60 * 24 * 365;
            response.AppendHeader("Pragma", "public");
            response.AppendHeader("Cache-Control", "max-age=" + cacheExpires);
            response.AppendHeader("Expires", DateTime.Now.ToUniversalTime().AddSeconds(cacheExpires).ToString("r"));
            context.Response.ContentType = "text/html";
            context.Response.Write("<script src='"//connect.facebook.net/en_US/all.js'"></script>");        
        }
        public bool IsReusable { get { return false; } }
    }
    

请确保您引用FB.init函数中的URL:

channelUrl:'//WWW.YOUR_DOMAIN.COM/fbchannel.ashx',

频道文件是可选的,但建议使用,频道文件用于解决某些浏览器中的某些跨域通信问题(从您的域到facebook.com),只要它返回API描述的内容,您就可以使用channel.aspx。建议web应用程序缓存通道文件,请阅读本文了解asp.net如何处理缓存:http://msdn.microsoft.com/enus/library/xsbfdd8c(v=vs.71).aspx

并阅读您描述的链接中的"通道文件"主题以了解更多信息。