Search code examples
c#asp.netasp.net-mvcasp.net-core

Why doesn't output caching middleware recognize the root controller URL in ASP.NET Core MVC


I have an ASP.NET application. The Index method that loads the page performs queries on a database. These queries are expensive and that datasets change infrequently, so this is a perfect use case for caching.

I added the output caching middleware to my Program.cs file.

I want to cache the server-side output, so I added flags to my Index functions:

[HttpGet]
[OutputCache(Duration = 43200, NoStore = false)]
public IActionResult Index()
{
    some code...
}

When I access the page using: https://web.app.com/Controller/Index the page caches as expected. However, when I use: https://web.app.com/Controller/ (which routes to the same endpoint) the page fails to cache, even after refreshing.

I understand that each unique URL should be cached by the server. Is there any reason why the root URL is being ignored?


Solution

  • I changed my app setup in Program.cs from:

    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
    

    to:

    app.MapDefaultControllerRoute();
    

    For some reason, this fixed the problem--the root URL for the controller is now being cached.

    Microsoft documentation states that MapDefaultControllerRoute() is a convenience method that is equivalent to the first code snippet.

    If anyone knows why this would make a difference, feel free to comment.