SplatDev.Umbraco.Plugins.ShortUrls
2.1.11
dotnet add package SplatDev.Umbraco.Plugins.ShortUrls --version 2.1.11
NuGet\Install-Package SplatDev.Umbraco.Plugins.ShortUrls -Version 2.1.11
<PackageReference Include="SplatDev.Umbraco.Plugins.ShortUrls" Version="2.1.11" />
<PackageVersion Include="SplatDev.Umbraco.Plugins.ShortUrls" Version="2.1.11" />
<PackageReference Include="SplatDev.Umbraco.Plugins.ShortUrls" />
paket add SplatDev.Umbraco.Plugins.ShortUrls --version 2.1.11
#r "nuget: SplatDev.Umbraco.Plugins.ShortUrls, 2.1.11"
#:package SplatDev.Umbraco.Plugins.ShortUrls@2.1.11
#addin nuget:?package=SplatDev.Umbraco.Plugins.ShortUrls&version=2.1.11
#tool nuget:?package=SplatDev.Umbraco.Plugins.ShortUrls&version=2.1.11
ShortUrls
Umbraco short URL plugin — generate, store, and resolve short URLs backed by any EF Core DbContext. Supports Umbraco 13 (net8.0) and Umbraco 17 (net10.0).
Compatibility
| Umbraco | .NET | Package Version |
|---|---|---|
| 13.x | 8.0 | 2.1.11 |
| 17.x | 10.0 | 2.1.11 |
Installation
dotnet add package SplatDev.Umbraco.Plugins.ShortUrls
Quick Start
Registration is generic in your own short-URL entity — the extension method is
AddShortUrls<T>(), and it does not compile without the type argument:
builder.CreateUmbracoBuilder()
.AddBackOffice()
.AddWebsite()
.AddShortUrls<YourShortUrlEntity>() // <-- add this
.Build();
Configuration
Wire up your EF Core DbContext to implement IShortUrl:
// appsettings.json
{
"ConnectionStrings": {
"ShortUrlDb": "Server=.;Database=ShortUrls;..."
}
}
Usage
Implement IShortUrl
Your entity must implement the interface:
using SplatDev.Umbraco.Plugins.ShortUrls.Models;
public class MyShortUrl : IShortUrl
{
public int Id { get; set; }
public string? ShortUrl { get; set; }
public string Url { get; set; } = "";
}
Generate and Resolve
using SplatDev.Umbraco.Plugins.ShortUrls.Services;
var service = new ShortUrlService<MyShortUrl>(dbContext);
// Generate a unique short code (collision-safe)
string code = service.GenerateShortUrl(); // e.g. "xK7mP2"
// Save to DB
dbContext.Add(new MyShortUrl { ShortUrl = code, Url = "https://example.com/long/path" });
await dbContext.SaveChangesAsync();
// Resolve a short URL
string redirectUrl = service.Get(code);
// → "https://example.com/long/path"
Front-End Controller
The ShortUrlController<T> implements IVirtualPageController — it intercepts requests to /s/{random} and issues a 302 redirect to the mapped URL:
// Maps /s/xK7mP2 → redirect to stored full URL
[HttpGet]
public async Task<IActionResult> GetFromShortUrl(string shortUrl)
{
var redirectUrl = shortUrlService.Get(shortUrl);
return Redirect(redirectUrl);
}
Architecture
| Component | Role |
|---|---|
IShortUrl |
Interface your entity must implement (ShortUrl, Url) |
IShortUrlService |
Generate unique codes, check existence, resolve |
ShortUrlController<T> |
MVC controller handling /s/{random} → 302 redirect |
ShortUrlExtensions |
Random URL-safe code generation (collision-checked) |
Changelog
2.1.11 — 2026-08-25
Documentation only, no code change. The README's Quick Start told you to call a registration method that does not exist in this package — following it produced a compile error on the first build. There is nothing to register: the package ships Umbraco composers and the AddComposers() already in the default Program.cs finds it. The Compatibility table also now shows the version actually being shipped instead of the one it was written at.
2.1.10 — 2026-08-24
Removes a dashboard screenshot that showed an error toast. It was captured against a site where this plugin's API was unreachable, so it advertised a broken dashboard. No screenshot is better than a misleading one; a replacement will be taken against a working install.
2.1.9 — 2026-08-24
Package metadata only: the listing now carries an icon and search tags, and the project and repository links point at the organisation that actually hosts this code. No code changes.
2.1.8 — 2026-08-21
- A failed request now says so in the dashboard. Previously the dashboard kept its previous (usually empty) state, so a refused or failed call looked identical to having no data.
2.1.7 — 2026-08-21
- Dashboard now sends the backoffice token with its API calls. On Umbraco 17 those calls were arriving unauthenticated and coming back 401, which the dashboard rendered as an empty state rather than an error.
- A failed request now raises a notification instead of leaving the dashboard looking like there is simply no data.
License
MIT © SplatDev
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.EntityFrameworkCore (>= 10.0.7)
- Microsoft.EntityFrameworkCore.SqlServer (>= 10.0.7)
- Microsoft.Extensions.FileProviders.Embedded (>= 10.0.6)
- Umbraco.Cms.Core (>= 17.3.4)
- Umbraco.Cms.Infrastructure (>= 17.3.4)
- Umbraco.Cms.Web.Common (>= 17.3.4)
- Umbraco.Cms.Web.Website (>= 17.3.4)
-
net8.0
- Microsoft.EntityFrameworkCore (>= 8.0.20)
- Microsoft.EntityFrameworkCore.SqlServer (>= 8.0.20)
- Microsoft.Extensions.FileProviders.Embedded (>= 8.0.11)
- Umbraco.Cms.Core (>= 13.12.0)
- Umbraco.Cms.Infrastructure (>= 13.12.0)
- Umbraco.Cms.Web.Common (>= 13.12.0)
- Umbraco.Cms.Web.Website (>= 13.12.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.1.11 | 52 | 8/25/2026 |