在没有路线的情况下赶上 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
要捕捉没有路线的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