捕获网址而没有路由

时间:2018-12-12 14:01:48

标签: asp.net-core razor-pages asp.net-core-2.2

要捕获没有路线的 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);
});

1 个答案:

答案 0 :(得分:1)

似乎您正在尝试拦截404并返回自定义错误页面。 ASP.NET Core包括可实现此目的的中间件:StatusCodePagesMiddleware。您将以下内容放入您的Configure方法中:

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

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

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