67 lines
2.2 KiB
C#

using System.Text.Json;
using System.Text.Json.Serialization;
namespace PlotLine.Services;
public static class PublicRouteNames
{
public const string Home = "PublicHome";
public const string Pricing = "PublicPricing";
public const string Help = "PublicHelp";
public const string HelpCategory = "PublicHelpCategory";
public const string HelpArticle = "PublicHelpArticle";
public const string About = "PublicAbout";
public const string Contact = "PublicContact";
public const string Privacy = "PublicPrivacy";
public const string Terms = "PublicTerms";
}
public static class PublicSeo
{
public const string DefaultBaseUrl = "https://plotdirector.com";
public static string BaseUrl(IConfiguration configuration)
{
var baseUrl = configuration["Site:PublicBaseUrl"]?.TrimEnd('/');
return string.IsNullOrWhiteSpace(baseUrl) ? DefaultBaseUrl : baseUrl;
}
public static string AbsoluteUrl(IConfiguration configuration, string path) =>
$"{BaseUrl(configuration)}{path}";
public static string JsonLd(object value) =>
JsonSerializer.Serialize(value, new JsonSerializerOptions
{
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull
});
public static string WebPageJsonLd(
IConfiguration configuration,
string schemaType,
string name,
string path,
string? description = null) =>
JsonLd(new Dictionary<string, object?>
{
["@context"] = "https://schema.org",
["@type"] = schemaType,
["name"] = name,
["url"] = AbsoluteUrl(configuration, path),
["description"] = description
});
public static string BreadcrumbJsonLd(params (string Name, string Url)[] items) =>
JsonLd(new Dictionary<string, object?>
{
["@context"] = "https://schema.org",
["@type"] = "BreadcrumbList",
["itemListElement"] = items.Select((item, index) => new Dictionary<string, object?>
{
["@type"] = "ListItem",
["position"] = index + 1,
["name"] = item.Name,
["item"] = item.Url
})
});
}