Merge pull request #2747 from thabaum/patch-19

Add content-type to sitemap: Fixes issues 2749 2764
This commit is contained in:
Shaun Walker 2023-05-02 14:20:39 -04:00 committed by GitHub
commit 2ebd1310c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -48,11 +48,11 @@ namespace Oqtane.Pages
// build site map // build site map
var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList(); var moduleDefinitions = _moduleDefinitions.GetModuleDefinitions(_alias.SiteId).ToList();
var pageModules = _pageModules.GetPageModules(_alias.SiteId); var pageModules = _pageModules.GetPageModules(_alias.SiteId);
foreach (var page in _pages.GetPages(_alias.SiteId)) foreach (var page in _pages.GetPages(_alias.SiteId))
{ {
if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation) if (_userPermissions.IsAuthorized(null, PermissionNames.View, page.PermissionList) && page.IsNavigation)
{ {
sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + Utilities.NavigateUrl(_alias.Path, page.Path, ""), ModifiedOn = page.ModifiedOn }); sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + Utilities.NavigateUrl(_alias.Path, page.Path, ""), ModifiedOn = DateTime.UtcNow });
foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId)) foreach (var pageModule in pageModules.Where(item => item.PageId == page.PageId))
{ {
@ -66,12 +66,11 @@ namespace Oqtane.Pages
{ {
try try
{ {
pageModule.Module.Settings = _settings.GetSettings(EntityNames.Module, pageModule.ModuleId).ToDictionary(x => x.SettingName, x => x.SettingValue);
var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype); var moduleobject = ActivatorUtilities.CreateInstance(_serviceProvider, moduletype);
var urls = ((ISitemap)moduleobject).GetUrls(_alias.Path, page.Path, pageModule.Module); var urls = ((ISitemap)moduleobject).GetUrls(_alias.Path, page.Path, pageModule.Module);
foreach (var url in urls) foreach (var url in urls)
{ {
sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + url.Url, ModifiedOn = url.ModifiedOn }); sitemap.Add(new Sitemap { Url = _alias.Protocol + _alias.Name + url.Url, ModifiedOn = DateTime.UtcNow });
} }
} }
catch (Exception ex) catch (Exception ex)
@ -86,17 +85,24 @@ namespace Oqtane.Pages
} }
// write XML // write XML
XmlWriterSettings settings = new XmlWriterSettings(); var encoding = new UTF8Encoding(false);
settings.Indent = true; var xmlDeclaration = new XDeclaration("1.0", encoding.WebName, null);
settings.IndentChars = (" "); var settings = new XmlWriterSettings
settings.CloseOutput = true; {
settings.OmitXmlDeclaration = true; Indent = true,
settings.WriteEndDocumentOnClose = true; IndentChars = " ",
CloseOutput = true,
Encoding = encoding,
OmitXmlDeclaration = true,
WriteEndDocumentOnClose = true,
NewLineChars = Environment.NewLine
};
StringBuilder builder = new StringBuilder(); var builder = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(builder, settings)) using (var writer = XmlWriter.Create(builder, settings))
{ {
writer.WriteStartDocument(); writer.WriteStartDocument();
writer.WriteRaw(Environment.NewLine);
writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9"); writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
foreach (var url in sitemap) foreach (var url in sitemap)
@ -106,10 +112,12 @@ namespace Oqtane.Pages
writer.WriteElementString("lastmod", url.ModifiedOn.ToString("yyyy-MM-dd")); writer.WriteElementString("lastmod", url.ModifiedOn.ToString("yyyy-MM-dd"));
writer.WriteEndElement(); writer.WriteEndElement();
} }
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close(); writer.Close();
} }
return Content(builder.ToString()); return Content(xmlDeclaration + builder.ToString(), "application/xml");
} }
} }
} }