/// <summary> /// Get a value indicating whether the request is made by search engine (web crawler) /// </summary> /// <returns>Result</returns> public virtual bool IsSearchEngine() { if (_httpContextAccessor?.HttpContext == null) { return(false); } try { BrowscapXmlHelper browscapXmlHelper = GetBrowscapXmlHelper(); //we cannot load parser if (browscapXmlHelper == null) { return(false); } Microsoft.Extensions.Primitives.StringValues userAgent = _httpContextAccessor.HttpContext.Request.Headers[HeaderNames.UserAgent]; return(!string.IsNullOrWhiteSpace(userAgent) && browscapXmlHelper.IsCrawler(userAgent)); } catch { // ignored } return(false); }
protected virtual BrowscapXmlHelper GetBrowscapXmlHelper() { if (Singleton <BrowscapXmlHelper> .Instance != null) { return(Singleton <BrowscapXmlHelper> .Instance); } string userAgentStringPath = "~/App_Data/browscap.xml"; //no database created if (string.IsNullOrEmpty(userAgentStringPath)) { return(null); } //prevent multi loading data lock (_locker) { //data can be loaded while we waited if (Singleton <BrowscapXmlHelper> .Instance != null) { return(Singleton <BrowscapXmlHelper> .Instance); } string userAgentStringsPath = _fileProvider.MapPath(userAgentStringPath); string crawlerOnlyUserAgentStringsPath = _fileProvider.MapPath("~/App_Data/browscap.crawlersonly.xml"); BrowscapXmlHelper browscapXmlHelper = new BrowscapXmlHelper(userAgentStringsPath, crawlerOnlyUserAgentStringsPath, _fileProvider); Singleton <BrowscapXmlHelper> .Instance = browscapXmlHelper; return(Singleton <BrowscapXmlHelper> .Instance); } }