SEO Urls in ASP.NET Core sind extrem simpel, alles was man braucht ist eine Route an der Action. Bei Interesse kann man die URL auch auswerten, muss man aber nicht.
``` C#
[Route("/Blog/ViewPosting/{id}")]
[Route("/Blog/ViewPosting/{id}/{title}")]
public IActionResult ViewPosting(int id)
{
[...]
return View(posting);
}
```
... <a href="/Blog/ViewPosting/19/seo-urls">(Weiterlesen)</a>
12/21/2022 5:16:40 PM
by Chris 666
Quellen:
* https://andrewlock.net/adding-cache-control-headers-to-static-files-in-asp-net-core/
* https://learn.microsoft.com/en-us/aspnet/core/fundamentals/static-files?view=aspnetcore-7.0
* https://stackoverflow.com/questions/37706370/how-to-cache-css-js-or-images-files-to-asp-net-core
Heute hab ich ein wenig Caching in den Blog eingebaut, als Inspiration hatte ich die Links oben.
Zuerst wird die Program.cs angepasst
``` csharp
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddResponseCaching();
var app = builder.Build();
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
string path = ctx.File.Name.ToLower();
if (path.EndsWith(".css")
|| path.EndsWith(".js")
|| path.EndsWith(".gif")
|| path.EndsWith(".jpg")
|| path.EndsWith(".png")
|| path.EndsWith(".ico")
|| path.EndsWith(".woff2")
|| path.Contains("/blog/getimage/"))
{
var maxAge = new TimeSpan(7, 0, 0, 0);
ctx.Context.Response.Headers.Append("Cache-Control", "max-age=" + maxAge.TotalSeconds.ToString("0"));
}
else
{
//Request for views fall here.
ctx.Context.Response.Headers.Append("Cache-Control", "no-cache");
ctx.Context.Response.Headers.Append("Cache-Control", "private, no-store");
}
}
});
```
Und nun pass wir wir noch die GetImage Funktion an
``` csha
```
... <a href="/Blog/ViewPosting/17/caching-in-asp.net-core">(Weiterlesen)</a>
12/21/2022 5:09:18 PM
by Chris 886
markdown-it mit highlight.js in ASP.NET MVC als reines JavaScript
https://highlightjs.org/
https://markdown-it.github.io/
C# Code für das Posting
``` C#
@section Scripts{
<script type="text/javascript" >
$(document).ready(function() {
postingsMD = {};
@foreach(var posting in Model)
{
@Html.Raw("postingsMD[" + posting.Id + "] = $(\'.blog-content" + posting.Id + "').html().replace(/&/g, \"&\").replace(/</g, \"<\").replace(/>/g, \">\").replace(/"/g, \"\\\"\").replace(/'/g, \"'\");")
}
var md = window.markdownit({
html: true,
linkify: true,
typographer: true
});
$.map( postingsMD, function( val, i ) {
$('.blog-content' + i).html(md.render(val))
});
hljs.highlightAll();
});
</script>
}
<p class="@Html.Raw("blog-content" + posting.Id)">@posting.Text</p>
```
HTML Code im Header
``` HTML
<link href="/lib/highlightjs/styles/default.min.css" rel="stylesheet" >
```
HTML Code am Ende
``` HTML
<script src="/js/jquery.min.js"></script>
<script src="/lib/markdown-it-13.0.1/markdown-it.js"></script>
<script src="/lib/highlightjs/highlight.min.js"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
```
... <a href="/Blog/ViewPosting/7/markdown-it-and-highlightjs-in-mvc-apsnetcore-.net6.0">(Weiterlesen)</a>
7/6/2022 10:22:21 PM
by Chris 1071