在没有路线的情况下赶上 url

Catch url with no route

要捕捉没有路线的url,可以这样做

services.AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddRazorPagesOptions(options =>
    {
        options.Conventions.AddPageRoute("/Error/Nopage", "{*url}");
    });

但后来我注意到 Nopage.cshtml.cs 中的 OnGet() 方法会为所有路线调用,即使是有路线的路线。

这是标准行为吗?应该如何捕获未路由的 url 的 ? ...或者是否有其他方法可以在没有路线的情况下捕获 url

另外,从workload/performance的角度来看,启动并加载一个不会被使用的页面模型感觉有点不对。


请注意,在使用 AddPageRoute 之前,我曾在 Startup.cs 中这样做过,效果很好,尽管上面的感觉更像是 应该怎么做它.

app.UseMvc();

// Page missing in MVC...
app.Use(async (context, next) =>
{
    //simplified code snippet
    s = await File.ReadAllTextAsync(Path.Combine(env.WebRootPath, "pagemissing.html"));
    await context.Response.WriteAsync(s);
});

您似乎在尝试拦截 404 和 return 自定义错误页面。 ASP.NET 核心包括执行此操作的中间件:StatusCodePagesMiddleware。您将以下内容放入 Configure 方法中:

app.UseStatusCodePagesWithReExecute("/{0}");

其中 {0} 是状态代码的占位符。创建一个名为 404.cshtml 的页面,只要有人浏览到一个不存在的 URL,它就会被执行。您还可以创建一个名为 500.cshtml 的页面,如果出现服务器错误,它将被执行。

在此处查看更多相关信息:https://www.learnrazorpages.com/configuration/custom-errors