Skip to content

Document: IDocumentAssets.AddMeta() i AddLink() #32

Description

@Alerinos

Problem

DocumentOptions / IDocumentAssets mają AddStylesheet, AddScript, AddHeadComponent<T>() i SetFavicon. Nie mają nic dla <meta> ani <link rel>.

Żeby wypisać dwa statyczne meta-tagi, konsument musi dziś napisać komponent Razora z code-behind i zarejestrować go przez AddHeadComponent<T>(). To jest nieproporcjonalne do zadania — a zadanie jest częste (weryfikacje spoza wbudowanej listy, theme-color, apple-mobile-web-app-*, link rel="me", link rel="alternate" type="application/rss+xml").

Kształt

services.AddWebsite(o =>
{
    o.Document
        .AddStylesheet("app.css")                                  // istnieje
        .AddMeta("theme-color", "#0b0b0b")                         // nowe
        .AddMeta("apple-mobile-web-app-capable", "yes")            // nowe
        .AddLink("alternate", "/feed.xml", type: "application/rss+xml"); // nowe
});

Do rozważenia przy projektowaniu:

  • name vs property — Open Graph używa property, nie name. Albo drugi przeciążony wariant, albo parametr; nie da się tego zgadnąć z samej nazwy klucza.
  • Deduplikacja — dwa wywołania z tym samym name powinny nadpisywać, nie dublować, inaczej pierwszy błąd konsumenta produkuje dwa sprzeczne theme-color.
  • Kolizja z meta generowanymi przez frameworkdescription, og:*, canonical, tagi weryfikacyjne mają swoich właścicieli. Albo AddMeta przegrywa z nimi po cichu, albo ostrzega. Skłaniam się do: framework wygrywa, a AddMeta na zarezerwowaną nazwę loguje ostrzeżenie przy starcie — nie w czasie żądania.

Powiązane

VerificationModel.Custom (słownik meta name → token) rozwiązał ten problem lokalnie dla jednego przypadku. AddMeta jest jego uogólnieniem; po jego wejściu warto sprawdzić, czy Custom nadal ma rację bytu, czy staje się cukrem składniowym.

Zakres pracy

  • AddMeta(name, content) + wariant dla property
  • AddLink(rel, href, type?, hreflang?, sizes?)
  • deduplikacja po kluczu
  • lista nazw zarezerwowanych + ostrzeżenie przy starcie
  • emisja w PageHead w ustalonym regionie, po meta frameworka

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions