2017-05-29 28 views
-1

我目前正在致力于facebook分享,并且似乎在Facebook上与C#共享的主题并不多。想学的东西......在mvc /剃须刀视图中检测facebook抓取工具

我的Open Graph meta标签中的剃刀视图中的一个象下面这样:

<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Hello World!</title> 
    <meta property="fb:app_id" content="************" /> 
    <meta property="og:site_name" content="www.hello-world.com" /> 
    <meta property="og:type" content="website" /> 
    <meta property="og:url" content="http://hello-world.com/home/fbshare" /> 
    <meta property="og:title" content="How are you doing today?" /> 
    <meta property="og:description" content="Great to know you are doing fine." /> 
    <meta name="author" content="Hello" /> 
    <meta property="og:image" content="https://images.pexels.com/photos/2324/skyline-buildings-new-york-skyscrapers.jpg?w=940&h=650&auto=compress&cs=tinysrgb" /> 
    <meta property="og:image:type" content="image/jpeg" /> 
    <meta property="og:image:width" content="800" /> 
    <meta property="og:image:height" content="420" /> 
</head> 

对于普通用户,我想他们从这种观点就像下面重定向到别的地方:

@{Response.Redirect("Somewhere in my application")}; 

但我不想重定向Facebook的刮板。无论如何,我可以识别Facebook或Facebook的刮板用户代理,如果我发现这是Facebook的用户代理不重定向他的任何其他地方重定向他们从视图到别的地方。

P.S:根据facebook官方文档,我必须找到Facebook用户代理,并允许他们刮我的Open Graph元标记,但我无法挖掘出一种方式。

Facebook抓取工具需要能够以 的顺序访问您的内容才能正确抓取和分享。您的网页应该可以被 抓取工具看到。如果您需要登录或以其他方式限制访问您的 内容,则需要将我们的抓取工具列入白名单。您还应该免除DDoS保护机制。

如果在抓取时内容不可用,您可以通过将URL传递给 共享调试器,强制 重新抓取。

Facebook的履带可以通过这些用户代理字符串来标识:

facebookexternalhit/1.1 (+ http://www.facebook.com/externalhit_uatext.php) OR facebookexternalhit/1.1

回答

0

您是否尝试过:

var userAgent = HttpContext.Request.Headers["User-Agent"]; 
if (userAgent != null && 
    userAgent.Contains("facebookexternalhit/")) 
{ 
    // Is a Facebook agent 
} 
else 
{ 
    // Is not a Facebook agent 
} 

当然,在MVC中,您不应该从视图重定向,只能从控制器filter重定向。

+0

没有运气,它仍然将scrapper重定向到我为重定向定义的操作。任何想法? – Newbie

+0

我根据[这里](https://stackoverflow.com/a/9031912/181087)更改了我的答案。用户代理字符串中的信息可能比实际代理传递的信息多。您应该设置代码以记录标题中的实际内容,以便随后可以设置正确的条件。 – NightOwl888

+0

我试图登录用户代理,但实际上它是空的。日志中保存的文本文件为空,不显示任何内容。可能是什么问题呢? – Newbie