Files
gnezim 0a5ab058a6 Initial commit: Aeroflot Flights Web - Angular 12 baseline
- Angular 12 application with PrimeNG components
- 5 existing Cypress e2e test suites
- SCSS styling with BEM naming convention
- i18n support (10 languages)
- Leaflet map integration
- Complete component hierarchy and routing structure

This baseline will be used for Angular → React migration.
2026-04-05 18:47:57 +03:00

86 lines
3.1 KiB
C#

using System;
using System.IO;
using System.Text;
using System.Xml;
using Microsoft.AspNetCore.Html;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Configuration;
namespace Aeroflot.Flights.Web.Pages
{
[ResponseCache(CacheProfileName = "DefaultBoard")]
[System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1649:File name should match first type name", Justification = "Razor page model")]
public class SitemapModel : PageModel
{
private static readonly XmlWriterSettings XmlWriterSettings = new XmlWriterSettings() { Encoding = Encoding.UTF8, Indent = true };
private readonly IConfiguration configuration;
private readonly bool allowIndexing;
public SitemapModel(IConfiguration configuration)
{
this.configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
this.allowIndexing = configuration.GetValue<bool>("AllowIndexing", false);
}
public HtmlString GetSitemap
{
get
{
var today = DateTime.Now.Date.ToString("yyyy-MM-dd");
StringBuilder sb = new StringBuilder();
using (var sw = new StringWriterWithEncoding(sb, Encoding.UTF8))
using (XmlWriter writer = XmlWriter.Create(sw, XmlWriterSettings))
{
writer.WriteStartElement("urlset", "http://www.sitemaps.org/schemas/sitemap/0.9");
if (this.allowIndexing)
{
foreach (var lang in Models.Seo.LanguagePairs)
{
//obrd
writer.WriteStartElement("url");
writer.WriteElementString("loc", "https://" + HttpContext.Request.Host + $"/{lang}/onlineboard");
writer.WriteElementString("lastmod", today);
writer.WriteEndElement();
//schedule
writer.WriteStartElement("url");
writer.WriteElementString("loc", "https://" + HttpContext.Request.Host + $"/{lang}/schedule");
writer.WriteElementString("lastmod", today);
writer.WriteEndElement();
}
}
writer.WriteEndElement();
writer.Flush();
}
return new HtmlString(sb.ToString());
}
}
public void OnGet()
{
}
public class StringWriterWithEncoding : StringWriter
{
private readonly Encoding encoding;
public StringWriterWithEncoding(StringBuilder sb, Encoding encoding)
: base(sb)
{
this.encoding = encoding;
}
public override Encoding Encoding
{
get
{
return this.encoding;
}
}
}
}
}