Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Blog Konzept in ASP.NET
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 259

Themenstarter:

Blog Konzept in ASP.NET

beantworten | zitieren | melden

Hi,

ich habe ein paar konzeptionelle Fragen zu einem kleinen Blog-Projekt in ASP.NET.

1. Rendern der Inhalte
Das habe ich hier schon mal gefragt, wollte jetzt aber nochmal sicher gehen.
Aus meiner Datenbank lese ich z.B. die Spalte MarkdownContent aus (per EntityFramework in ein Modell "Blog").
Im Controller würde ich die Umwandlung mit https://github.com/xoofx/markdig dann so machen und dem View übergeben:


...
var result = Markdown.ToHtml(Post.MarkdownContent);
postViewModel.HtmlContent = result;
...
Und das Ergebnis per Razor im View direkt rendern:


@Html.Raw(postViewModel.result)

Ist das soweit korrekt oder gibts da einen direkteren oder besseren Weg?

2. Slug-Urls
Die Posts sollen per Slugs verlinkt werden.


// Post Details per Slug
[Route("Blog/Post/{slug}")]
public async Task<IActionResult> Post(string slug)
{
//...
}
// Post Details per ID
public async Task<IActionResult> Post(int id)
{
//...
}

Ist es möglich dass ich in den Views in Razor mit ID arbeite und ASP.NET mir die URL mit einem Slug automatisch generiert, also das auf Titel-Änderungen reagiert wird?


Html.ActionLink(post.Title, 
                "Blog", 
                "Post",   // <-- ActionMethod
                new { id = post.ID });

// oder dann sowas:
Html.ActionLink(post.Title, 
                "Blog", 
                "Post",   // <-- ActionMethod
                new { slug = _StringHelper.ConvertToSlug(post.Title) });

Also dass die URL automatisch in die Überladung umgewandelt wird (/Blog/Post/Mein-erster-Post) und die Konvertierung nicht im View definiert wird?

private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15841
Herkunft: BW

beantworten | zitieren | melden

Zitat von JimStark
Im Controller würde ich die Umwandlung mit https://github.com/xoofx/markdig dann so machen und dem View übergeben:
Strukturell gesehen würde man dafür nen Render-Layer einbauen; zum Beispiel als TagHelper.
Wenn Du HTML Inhalte im ViewModel hast dann musst Dir halt bewusst sein, das damit automatisch das Format der Action bekannt ist, was man ja vermeiden will.
Zitat von JimStark
Ist es möglich dass ich in den Views in Razor mit ID arbeite und ASP.NET mir die URL mit einem Slug automatisch generiert, also das auf Titel-Änderungen reagiert wird?
"Ist es möglich"-Fragen können immer mit Ja beantwortet werden, daher bringen diese zu nichts.
Slugs im Sinne von SEO sollten im Nachhinein ohnehin nicht geändert werden, sofern Du keine andere Eindeutigkeit hast.

Das Forum hier arbeitet auch mit Slugs, sie sind aber nur Optional und dienen dem SEO.
Du kannst prinzipiell nach der /id/ alles hinschreiben, weil es ignoriert wird. Das ist ein übliches und sogar empfohlenes Vorgehen; verwenden die meisten Großen seiten.
Gleiches Konzept könntest Du auch fahren. Schau Dir also an wie SEO funktioniert dann siehst Du auch warum die meisten URLs ein gewisses, sogar ähnliches Format haben.

Gibt auch spezielle Blog-SEO "Analysen", die zB noch das Datum in die URL packen bzgl. Ranking.
Wie das Slug-Escaping erfolgt, dafür gibt auch einen großen gemeinsamen Nenner, mit etwas spezialisierten Umwandlungen je nach Bedarf.
Das Forum hier hat einen speziellen Slug-Generator auf Grundbasis des Generators von Stack Overflow.
Die Slugs in meinem Blog schreib ich selbst und stellen den Datenbank-Key dar, damit ich mehr Kontrolle auf SEO hab.
Zitat von JimStark
Also dass die URL automatisch in die Überladung umgewandelt wird (/Blog/Post/Mein-erster-Post) und die Konvertierung nicht im View definiert wird?
Html.Action und Co sollten sowieso nicht mehr verwendet werden, dafür gibts seit vielen Jahren mittlerweile der LinkGenerator Klasse (Microsoft.AspNetCore.Routing)
Route-Formate werden über das Routing definiert, das muss man nicht von Hand zusammen basteln.

Es ergibt Sinn, dass das Routing in der View erfolgt; kann aber überall erfolgen, wo der LinkGenerator verfügbar ist (der einen HttpContext braucht).


private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 259

Themenstarter:

beantworten | zitieren | melden

Zitat von Abt

Strukturell gesehen würde man dafür nen Render-Layer einbauen; zum Beispiel als TagHelper.
Wenn Du HTML Inhalte im ViewModel hast dann musst Dir halt bewusst sein, das damit automatisch das Format der Action bekannt ist, was man ja vermeiden will.

Mega cool, das kannte ich noch nicht. Falls es mehr interessiert: Erstellen von Taghilfsprogrammen in ASP.NET Core
Da würde ich ja dann einfach in der Process-Methode mit SetHtmlContent das gerenderte Markdown zurückgeben und mir so einen Markdown-Tag zusammenbauen.
Zitat von Abt

Du kannst prinzipiell nach der /id/ alles hinschreiben, weil es ignoriert wird. Das ist ein übliches und sogar empfohlenes Vorgehen; verwenden die meisten Großen seiten.
Gleiches Konzept könntest Du auch fahren. Schau Dir also an wie SEO funktioniert dann siehst Du auch warum die meisten URLs ein gewisses, sogar ähnliches Format haben.
Okay stimmt eigentlich, ich werde es dann wahrscheinlich auch mit festen Key machen.

Danke dir!

private Nachricht | Beiträge des Benutzers