67 lines
2.2 KiB
C#
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
|
|
})
|
|
});
|
|
}
|