← All posts

.NET Core handling Client-Side Routes

Client-side routing with .NET Core

If you are using any client-side framework like Vue, Angular, React and so, you are probably doing client-side routing which is letting the browser handles the routes E.g. myapp.com/about, myapp.com/account/user etc…

By default, the server only recognizes the root (/) and if you try to refresh the page (f5) or enter directly the URL myapp.com/about you will get 404 ERROR because you are sending an HTTP request to the server in the route /about, but your server doesn’t handle routes different from (/).

To solve this problem I found a really nice approach which is a simple fallback handler in the Startup.cs of our .NET Core app:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    ....Your configuration
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });
    //handle client side routes
    app.Run(async (context) =>
    {
        context.Response.ContentType = "text/html";
        await context.Response.SendFileAsync(Path.Combine(env.WebRootPath, "index.html"));
    });
}

The code above will return the right route to the Browers avoiding the 404 error if the path exists.

Do you have any question or a better approach? share with us in the comments.