Introducing Strathweb TypedRouting for ASP.NET MVC Core

One of the side projects I created for Web API a while ago was Strathweb.TypeRouting – a little library built on top of the attribute routing extensibility points, that allowed you to declare Web API routes centrally, in a strongly typed way (as opposed to the built in, anonymous object approach).

Then, some time ago, I blogged about how you would achieve the same thing in ASP.NET Core. A bunch of things have changed since then – the original post was written against beta6 of the framework I believe.

Last week, I set up the code on Github, migrated everything to RC2 and released on NuGet for everyone to use.


So in short, Strathweb.TypedRouting.AspNetCore is a next incarnation of the Strathweb.TypeRouting library from the ASP.NET Web API world, which enables strongly typed routing in ASP.NET Core MVC projects.


In your Startup class, after adding MVC, call opt.EnableTypedRouting(); and then configure your routes:

This creates:

  • a GET route to /homepage
  • a GET route to /aboutpage/{name}
  • a POST route to /sendcontact

All of which go against the relevant methods on our HomeController.

Link generation

Since the API is fluent, you can also give the routes names so that you can use them with i.e. link generation.

Now you can use it with IUrlHelper (it’s a Url property on every controller):

IUrlHelper can also be obtained from HttpContext, anywhere in the pipeline (i.e. in a filter):

Finally, you can also use this link generation technique with the built-in action results, such as for example CreatedAtRouteResult:

Route constraints

The library supports two ways of specifying route constraints:

  • inline in the template
  • via fluent API

The inline constraints are the same as you can use with attribute routing. For example:

You can also specify constraints via the fluent API, by chaining IActionConstraintMetadata implementations. Consider the following sample constraint class:

You can now use this class in the route declaration:


If you have any ideas, suggestions or want to help – please visit Github. Thanks!