要捕获没有路线的 url ,可以执行以下操作
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddRazorPagesOptions(options =>
{
options.Conventions.AddPageRoute("/Error/Nopage", "{*url}");
});
但是后来我注意到OnGet()
中的Nopage.cshtml.cs
方法被所有路由调用,即使有路由的也是这样。
这是标准行为吗?应该如何捕获未路由的 url ? ...或者还有其他方法可以捕获没有路径的 url 。
而且,从工作负载/性能的角度来看,启动和加载将不使用的页面模型感觉有些错误。
请注意,在使用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);
});
答案 0 :(得分:1)
似乎您正在尝试拦截404并返回自定义错误页面。 ASP.NET Core包括可实现此目的的中间件:StatusCodePagesMiddleware。您将以下内容放入您的Configure
方法中:
app.UseStatusCodePagesWithReExecute("/{0}");
其中{0}
是状态代码的占位符。创建一个名为 404.cshtml 的页面,只要有人浏览到不存在的URL,就会执行该页面。您还可以创建一个名为 500.cshtml 的页面,如果发生服务器错误,该页面将被执行。
在此处查看有关此内容的更多信息:https://www.learnrazorpages.com/configuration/custom-errors