Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.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 mvc 在mvc/razor视图中检测facebook爬虫_Asp.net Mvc_Facebook_Facebook Graph Api_Razor - Fatal编程技术网

Asp.net mvc 在mvc/razor视图中检测facebook爬虫

Asp.net mvc 在mvc/razor视图中检测facebook爬虫,asp.net-mvc,facebook,facebook-graph-api,razor,Asp.net Mvc,Facebook,Facebook Graph Api,Razor,我目前正在facebook共享上工作,似乎没有太多关于与C#共享facebook的话题。试图学习一些东西 我在一个razor视图中打开了Graph meta标记,如下所示: <head> <meta name="viewport" content="width=device-width" /> <title>Hello World!</title> <meta property=

我目前正在facebook共享上工作,似乎没有太多关于与C#共享facebook的话题。试图学习一些东西

我在一个razor视图中打开了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或facebookscraper用户代理,如果我发现这是facebook用户代理,请不要将其重定向到其他任何地方,将其从视图重定向到其他地方

注:根据facebook的官方文档,我必须找到facebook的用户代理,允许他们刮掉我打开的图形元标签,但我找不到办法

Facebook爬虫程序需要能够按顺序访问您的内容 正确地刮和分享它。您的页面应该对用户可见 爬虫。如果您需要登录或以其他方式限制对您的 内容,您需要将我们的爬虫列入白名单。你也应该豁免 它来自DDoS保护机制

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

Facebook爬虫可以通过以下任一用户代理字符串进行识别:

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

您是否尝试过:

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

当然,在MVC中,您永远不应该从视图重定向,而应该从控制器或控制器重定向。

不走运,它仍然会将报废程序重定向到我为重定向定义的操作。有什么想法吗?我根据当时的情况改变了答案。用户代理字符串中的信息可能比从实际代理传递的信息更多。您应该将代码设置为记录标头中的实际内容,以便随后正确设置条件。我尝试记录用户代理,但实际上它为空。保存日志的文本文件为空,不显示任何内容。有什么问题吗?你真的在用Facebook爬虫测试它吗?当然,如果它是一个普通请求,那么它将为null,这就是上面的else条件。您需要测试Facebook爬虫的实际功能,然后创建一个具有相同标题的请求,以便测试上述代码。很抱歉,这是因为权限问题。在我允许facebook在文件上写东西之后,我得到了这个
facebook外部点击/1.1(+http://www.facebook.com/externalhit_uatext.php)
用户代理。甚至把这个用户代理放进去也没用。它仍然重定向。。。愚蠢的我