Laden...

Blog Konzept in ASP.NET

Erstellt von JimStark vor 2 Jahren Letzter Beitrag vor 2 Jahren 311 Views
JimStark Themenstarter:in
309 Beiträge seit 2020
vor 2 Jahren
Blog Konzept in ASP.NET

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?

  1. 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?

16.807 Beiträge seit 2008
vor 2 Jahren

Im Controller würde ich die Umwandlung mit
>
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.

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.

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).

JimStark Themenstarter:in
309 Beiträge seit 2020
vor 2 Jahren

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.

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!