首页 > 解决方案 > 自定义 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文件中,我这样做是为了使 url 对用户友好:

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();
} 

标签: c#asp.net-corerazor-pages

解决方案


问题是:

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

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


推荐阅读