2012-06-08 2 views
3

내 페이지에 버튼이 있습니다. 버튼을 클릭하면, 나는이 다음 ... 페이스 북에og : 제목 og : 이미지 og : 설명 og : url 정보를 C#에서 Facebook으로

<meta property="og:title" content="Title" /> 
<meta property="og:description" content="Description" /> 
<meta property="og:url" content="url info" /> 
<meta property="og:image" content="image url" /> 

를 다음 태그 정보를 전송하려고하는 것은 내처럼 버튼 프레임

<iframe frameborder="0" scrolling="no" allowtransparency="true" 
    style="border: none; overflow: hidden; width: 260px; height: 35px;" 
    src="http://www.facebook.com/plugins/like.php? 
    href=http://localhost:49334/WebForm1.aspx&amp;send=false&amp; 
    layout=button_count&amp;width=100&amp;show_faces=false&amp; 
    action=like&amp;colorscheme=light&amp;font=arial&amp;height=35"> 
</iframe> 

다음 것은 동적으로 처리 할 수있는 첫 번째 방법입니다 메타 태그. 다음

var fbTitleTag = new MetaTag 
{ 
    AgentPageURL = "/", 
    MetaTagName = "og:title", 
    UserSiteName = CurrentAgent.UserSiteName, 
    MetaTagContent = Request.Cookies.Get("MasterTitle").Value 
}; 

var fbDesc = new MetaTag 
{ 
    AgentPageURL = "/", 
    MetaTagName = "og:description", 
    UserSiteName = CurrentAgent.UserSiteName, 
    MetaTagContent = Request.Cookies.Get("MasterDescription").Value 
}; 


var fbUrl = new MetaTag 
{ 
    AgentPageURL = "/", 
    MetaTagName = "og:url", 
    UserSiteName = CurrentAgent.UserSiteName, 
    MetaTagContent = Request.Cookies.Get("MasterURL").Value 
}; 



var fbImage = new MetaTag 
{ 
    AgentPageURL = "/", 
    MetaTagName = "og:image", 
    UserSiteName = CurrentAgent.UserSiteName, 
    MetaTagContent = Request.Cookies.Get("MasterImage").Value 
}; 

var tags = new MetaTagCollection { fbTitleTag, fbDesc, fbUrl, fbImage }; 

Literal ltMetaTags = null; 
ltMetaTags = (Literal)this.Master.FindControl("ltMetaTags"); 

MetaTags(tags, "wsws", "/", ltMetaTags, true); 

public static void MetaTags(MetaTagCollection MetaTags, string name, string strRawURL, Literal ltlMetaHolders, bool isProp) 
{ 
    // ltlMetaHolders.Text = ""; 

    foreach (AgentMetaTag oAgentMetaTag in agentMetaTags) 
    { 
     if (string.Compare(strRawURL, oAgentMetaTag.AgentPageURL, true) == 0) 
     { 
      if (oAgentMetaTag.MetaTagName.ToLower().Trim() != "footer" && oAgentMetaTag.MetaTagName.ToLower().Trim() != "title") 
      { 
       if (oAgentMetaTag.MetaTagName.ToLower().Trim() == "fbtitle") 
        oAgentMetaTag.MetaTagName = "title"; 

       RenderMetaTagByContentName(ltlMetaHolders, oAgentMetaTag.MetaTagName, oAgentMetaTag.MetaTagContent, isProp); 
      } 
     } 
    } 
} 

public static void RenderMetaTagByContentName(Literal ltlMetaHolder, string contentName, string content, bool isProp) 
{ 
    var metaTagFromat = isProp ? "<meta property=\"{0}\" content=\"{1}\" />" : "<meta name=\"{0}\" content=\"{1}\" /> "; 

    ltlMetaHolder.Text += string.Format(metaTagFromat, contentName, content); 

} 

동적으로 메타 태그를 처리 할 수있는 두 번째 방법입니다.

HtmlMeta tag = new HtmlMeta(); 
tag.Attributes.Add("property", "og:title"); 
tag.Content = "Title"; 
Page.Header.Controls.Add(tag); 

HtmlMeta tag1 = new HtmlMeta(); 
tag1.Attributes.Add("property", "og:description"); 
tag1.Content = "Desc"; 
Page.Header.Controls.Add(tag1); 

HtmlMeta tagurl = new HtmlMeta(); 
tagurl.Attributes.Add("property", "og:url"); 
tagurl.Content = "URL info"; 
Page.Header.Controls.Add(tagurl); 

HtmlMeta tagimg = new HtmlMeta(); 
tagimg.Attributes.Add("property", "og:img"); 
tagimg.Content = "Image URL"; 
Page.Header.Controls.Add(tagimg); 

는 마지막으로 지금이 순간 내가 단지 URL을 보내는 Like button을 클릭합니다 .. 아래와 같이

<meta property="og:title" content="Title" /> 
<meta property="og:description" content="Description" /> 
<meta property="og:url" content="url info" /> 
<meta property="og:image" content="image url" /> 
를 메타 태그를 렌더링합니다. Description/Image/Title을 전송하지 않아야합니다.

"http://developers.facebook.com/tools/debug"링크를 사용 중입니다. Description/Image/Title이 누락되었다고합니다.

어떤 아이디어?

답변

2

Facebook에 메타 데이터를 보내지 않으면 Facebook은 페이지를로드 할 때 페이지의 HTML에서 메타 데이터를 검색합니다. 다음과 같은 도구를 사용하여 URL을 볼보십시오 :

http://developers.facebook.com/tools/debug/og/echo?q=<your URL here> 

그것은 페이스 북이 (당신이 지금 사용하고있는 디버그 도구의 하단에있는 '스크랩 한 URL'링크의)보고 무엇을 보여줍니다.

메타 데이터 태그가 없으면 Facebook에서 해당 태그를 볼 수 없으며 메타 데이터를 Open Graph 개체에 추가하지 않습니다. 그렇다면 메타 데이터를 HTML에 제대로 추가하지 않았을 수 있습니다.

+0

이 하단에 표시 MyPage.cshtml 별도의 페이지에서

<meta property="og:type" content="website"> <meta property="og:site_name" content="Site name"> <meta property="og:title" content="@ViewBag.OGTitle" /> <meta property="og:description" content="@ViewBag.OGDesc" /> <meta property="og:url" content="@ViewBag.OGUrl"> <meta property="og:image" content="@ViewBag.OGImage" /> 

다음 세트 태그 값으로 Layout.cshtml에 메타 태그를 설정하려고 할 수 있습니다 내 쿼리의. –

+0

그러나 스크랩 한 URL에 메타 데이터가 표시됩니까?Facebook 디버그 도구를 사용하고 있지만 Facebook이 귀하의 URL에서 긁어 모으는 콘텐츠에 표시되는 내용을 표시하지 않았습니다. –

+0

메타 태그를 볼 수 없습니다. –

1

두 번째 접근법이 올바른 것처럼 보입니다. 문제는 그 코드를 어디에 두었습니까? Page_Load에서 호출되어야합니다.

좋아요 버튼을 클릭해도 og : xxxx 정보가 전송되지 않습니다. 페이지의 맨 처음부터 이미 og : xxxx 메타 태그가 있어야합니다.

0

MVC ASP.NET을 사용합니까?

당신은 내가 정확히 같은 일을하고

@model Books.Web.Models.ItemSource 
@{ 
    ViewBag.OGTitle = Model.Item.Title; 
    ViewBag.OGDesc = Model.Item.Description; 
    ViewBag.OGUrl = Request.Url.AbsoluteUri; 
    ViewBag.OGImage = Request.Url.Scheme + "://" + Request.Url.Host + Url.Action("ItemCover", "Image", new { id = Model.Item.Id, height = 350 }); 
    Layout = "~/Views/Shared/Layout.cshtml"; 
} 
<div>Page content here</div>