为什么输出缓存中间件不能识别ASP.NET Core MVC中的根控制器URL

ego6inou  于 2023-11-20  发布在  .NET
关注(0)|答案(2)|浏览(105)

我有一个ASP.NET应用程序。加载页面的Index方法在数据库上执行查询。这些查询的开销很大,而且数据集很少更改,所以这是一个缓存的完美用例。
我将输出缓存中间件添加到Program.cs文件中。
我想缓存服务器端输出,所以我在Index函数中添加了标志:

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

字符串
当我使用:https://web.app.com/Controller/Index访问页面时,页面会按预期进行缓存。然而,当我用途:https://web.app.com/Controller/(路由到同一个端点)时,页面无法缓存,即使在刷新后也是如此。
我知道每个唯一的URL都应该被服务器缓存。有什么原因会忽略根URL吗?

9udxz4iz

9udxz4iz1#

可能原因是“https://web.app.com/Controller/“结尾的”/“字符。尝试摆脱它或使用重定向:

var options = new RewriteOptions().AddRedirect("^(.*[^/])$", "$1/");
app.UseRewriter(options);

字符串

j2cgzkjk

j2cgzkjk2#

我在Program.cs中更改了我的应用程序设置:

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

字符串
致:

app.MapDefaultControllerRoute();


出于某种原因,这解决了问题--控制器的根URL现在被缓存了。
Microsoft文档指出,MapDefaultControllerRoute()是一个与第一个代码片段等效的方便方法。
如果有人知道为什么这会有所作为,请随时发表评论。

相关问题