自定义 404 页面未被重定向



每当用户在浏览器中输入错误的 url 时,我都会尝试重定向到 404 自定义错误页面。假设用户键入https://localhost:44332/foo(foo 页面不存在(,那么它应该重定向到自定义错误页面。就我而言,它没有,但为此,它有效:

https://localhost:44332/foo/foo-page

这将重定向到自定义错误页面。我在我的项目中做了一个小的锻炼,并相信这会导致此重定向出现问题 -https://localhost:44332/foo

我有一个页面,比如说user-details它使用如下所示的查询字符串重定向:

https://localhost:44332/user-details?=1002

因此,在Startup.cs文件中,我这样做是为了使网址用户友好:

public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddRazorPagesOptions(options =>
{
//Here is the routing done
options.Conventions.AddPageRoute("/user-details", "{id}");
});
services.AddEntityFrameworkSqlite().AddDbContext<MyDbContext>();
}

所以上面的代码做了什么,当用户键入https://localhost:4433/1002时,它会将相关详细信息重定向到用户详细信息页面(注意:我从正常工作的 url 中省略了用户详细信息页面名称(。所以现在每当我输入一个不存在的错误页面名称时,比如 foo 或其他什么 (https://localhost:44332/foo(,而不是重定向到错误页面,而是重定向到user-details页面。我错过或需要做什么才能使其相应地工作?

注意:处理Startup.cs文件中的错误,如下所示

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
//Error handling here
app.UseStatusCodePages();
app.UseExceptionHandler("/Error");
//The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseMvc();
} 

问题是:

options.Conventions.AddPageRoute("/user-details", "{id}");

仅仅因为它被命名为id并不意味着它会以某种方式只接受整数。您基本上已经创建了一个路由,无需额外的路由段即可捕获任何内容:即/foo会抓住,但/foo/bar不会。您可以添加一个约束来帮助,即"{id:int}",然后只有在路由段可以转换为 int 时才会捕获。

最新更新