Skip to content

ASP.NET Core model conventions to turn route tokens into kebab case urls

License

Notifications You must be signed in to change notification settings

seangwright/kebab-case-route-tokens

Repository files navigation

kebab-case-route-tokens

ASP.NET Core model conventions to turn route tokens into kebab case urls

dotnet add package Sgw.KebabCaseRouteTokens

https://www.nuget.org/packages/Sgw.KebabCaseRouteTokens/

Purpose

When you normally use the Microsoft.AspNetCore.Mvc.RouteAttribute type to annotate your Controllers and Actions you can use tokens in your route paths.

Example:

[Route("api/[controller]")]
public class UserRegistrationController
{
    [HttpPost]
    [Route("[action]")]
    public ActionResult CreateNewUserRegistration(UserRegistration registration)
    {
        // ...
    }

    [HttpGet]
    [ActionName("TestIt")]
    [Route("[action]")]
    public ActionResult GetUserData()
    {
        // ...
    }
}

These tokens will automatically be replaced by Mvc with the name of the controller (in the case of "[controller]" without the "Controller" suffix).

The resulting url for the first action above would be POST /api/UserRegistration/CreateNewUserRegistration

If you prefer kebab-case over PascalCase for your urls and you want to use the [controller]/[action] token replacement in the RouteAttributes you can use the convention classes in this project.

Usage

In your Startup.cs add the Convention classes to your MvcOptions.Conventions collection.

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc(options =>
        {
            options
                .Conventions
                .Add(new KebabCaseRouteTokenReplacementControllerModelConvention());

            var methodNamePrefixes = new string[]
            {
                "Create", "Delete", "Update", "Get", "Find"
            };

            options
                .Conventions
                .Add(new KebabCaseRouteTokenReplacementActionModelConvention(methodNamePrefixes));
        });
    }
}

Any method prefixes supplied to the KebabCaseRouteTokenReplacementActionModelConvention will be removed from the action method name before performing kebab-case conversion.

With the above example controller and action method the resulting generated url would be POST /api/user-registration/new-user-registration.

Since the second action method GetData has a custom action name set by [ActionName("TestIt")], no kebab-casing is performed on the action method url. The resulting url would be GET /api/user-registration/TestIt

If the ActionNameAttribute was not applied the resulting url would be GET /api/user-registration/user-data

About

ASP.NET Core model conventions to turn route tokens into kebab case urls

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages