Пример #1
0
        /// <summary>
        /// Get url submission quota
        /// </summary>
        /// <returns>Task&lt;UrlSubmissionQuota&gt;</returns>
        /// <method>BingWebmaster(string apiKey)</method>
        public async Task <UrlSubmissionQuota> GetUrlSubmission(string siteUrl)
        {
            string url = "GetUrlSubmissionQuota?siteUrl="
                         + siteUrl.Clean()
                         + "&apikey="
                         + _apiKey;

            JsonClient     client     = new JsonClient(_bingWebmasterUrl);
            HttpStatusCode statusCode = await client.SendRequest(HttpMethod.Get, url, string.Empty);

            UrlSubmissionQuota quota = new UrlSubmissionQuota();

            if (client.IsResponseSuccess)
            {
                Dictionary <string, object> results = client.GetResponseObject <Dictionary <string, object> >();
                if (results.Count > 0)
                {
                    quota = JsonConvert.DeserializeObject <UrlSubmissionQuota>(results.ElementAt(0).Value.ToString());
                }

                quota.StatusCode    = statusCode;
                quota.StatusMessage = statusCode.ToString();
            }
            else
            {
                quota.StatusCode    = statusCode;
                quota.StatusMessage = client.GetResponseString();
            }

            return(quota);
        }
Пример #2
0
        /// <summary>
        /// Create sitemap.xml in ASP.NET Core
        /// &lt;br /&gt;&lt;br /&gt;
        /// https://www.c-sharpcorner.com/article/create-and-configure-sitemap-xml-in-asp-net-core/
        /// </summary>
        /// <method>public void Create()</method>
        public void Create(CDCavellDbContext dbContext)
        {
            Assembly asm = Assembly.GetExecutingAssembly();

            var controllerActionList = asm.GetTypes()
                                       .Where(type => typeof(Controller).IsAssignableFrom(type))
                                       .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
                                       .Select(x => new { Controller = x.DeclaringType.Name, Action = x.Name, ReturnType = x.ReturnType.Name, Attributes = String.Join(",", x.GetCustomAttributes().Select(a => a.GetType().Name.Replace("Attribute", string.Empty))) })
                                       .ToList()
                                       .Where(x => x.Attributes.Contains("AllowAnonymous") && x.Attributes.Contains("HttpGet"))
                                       .Where(x => !x.Controller.Equals("AccountController"))
                                       .Where(x => !x.Controller.Equals("HomeController") || !x.Action.Equals("WithdrawConsent"))
                                       .ToList();


            var url  = "https://cdcavell.name";
            var list = new List <SitemapNode>();

            list.Add(new SitemapNode {
                LastModified = DateTime.UtcNow, Priority = 0.9, Url = url, Frequency = SitemapFrequency.Daily
            });

            foreach (var controllerAction in controllerActionList)
            {
                if (controllerAction.Controller.Equals("HomeController") && controllerAction.Action.Equals("Revoke"))
                {
                    list.Add(new SitemapNode {
                        LastModified = DateTime.UtcNow, Priority = 0.6, Url = url + "/" + controllerAction.Controller.Replace("Controller", string.Empty) + "/" + controllerAction.Action + "?provider=microsoft", Frequency = SitemapFrequency.Yearly
                    });
                    list.Add(new SitemapNode {
                        LastModified = DateTime.UtcNow, Priority = 0.6, Url = url + "/" + controllerAction.Controller.Replace("Controller", string.Empty) + "/" + controllerAction.Action + "?provider=google", Frequency = SitemapFrequency.Yearly
                    });
                    list.Add(new SitemapNode {
                        LastModified = DateTime.UtcNow, Priority = 0.6, Url = url + "/" + controllerAction.Controller.Replace("Controller", string.Empty) + "/" + controllerAction.Action + "?provider=github", Frequency = SitemapFrequency.Yearly
                    });
                    list.Add(new SitemapNode {
                        LastModified = DateTime.UtcNow, Priority = 0.6, Url = url + "/" + controllerAction.Controller.Replace("Controller", string.Empty) + "/" + controllerAction.Action + "?provider=twitter", Frequency = SitemapFrequency.Yearly
                    });
                    list.Add(new SitemapNode {
                        LastModified = DateTime.UtcNow, Priority = 0.6, Url = url + "/" + controllerAction.Controller.Replace("Controller", string.Empty) + "/" + controllerAction.Action + "?provider=facebook", Frequency = SitemapFrequency.Yearly
                    });
                }
                else
                {
                    list.Add(new SitemapNode {
                        LastModified = DateTime.UtcNow, Priority = 0.7, Url = url + "/" + controllerAction.Controller.Replace("Controller", string.Empty) + "/" + controllerAction.Action, Frequency = SitemapFrequency.Daily
                    });
                    int count = SiteMap.GetCount(controllerAction.Controller.Replace("Controller", string.Empty), controllerAction.Action, dbContext);
                    if (count == 0)
                    {
                        SiteMap siteMap = new SiteMap();
                        siteMap.Controller = controllerAction.Controller.Replace("Controller", string.Empty);
                        siteMap.Action     = controllerAction.Action;
                        siteMap.AddUpdate(dbContext);
                    }
                }
            }

            new SitemapDocument().CreateSitemapXML(list, _webHostEnvironment.ContentRootPath);

            BingWebmaster      bingWebmaster = new BingWebmaster(_appSettings.Application.BingWebmaster.ApiKey);
            UrlSubmissionQuota quota         = bingWebmaster.GetUrlSubmission(url).Result;

            var siteMaps = SiteMap.GetNotSubmittedSiteMap(dbContext);

            foreach (SiteMap siteMap in siteMaps)
            {
                if (quota.DailyQuota > 0 && quota.MonthlyQuota > 0)
                {
                    HttpStatusCode statusCode = bingWebmaster.SubmitUrl(url, url + "/" + siteMap.Controller + "/" + siteMap.Action).Result;
                    if (statusCode == HttpStatusCode.OK)
                    {
                        siteMap.LastSubmitDate = DateTime.Now;
                        siteMap.AddUpdate(dbContext);
                    }

                    quota = bingWebmaster.GetUrlSubmission(url).Result;
                }
            }

            using (var googleClient = new HttpClient())
            {
                HttpResponseMessage response = googleClient.GetAsync("https://www.google.com/ping?sitemap=" + url + "/sitemap.xml").Result;
                if (!response.IsSuccessStatusCode)
                {
                    _logger.Warning(
                        "Google Sitemap Ping: "
                        + response.StatusCode.ToString()
                        + " ["
                        + response.ReasonPhrase
                        + "]"
                        );
                }
            }
        }