自定义404页面未重定向

时间:2019-09-09 16:40:25

标签: c# asp.net-core razor-pages

每当用户在浏览器中输入错误的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 时,它会将相关详细信息重定向到用户详细信息页面(注意:我省略了用户详细说明来自网址的页面名称,效果很好)。因此,现在每当我输入不存在的错误页面名称时,请说foo或其他( https://localhost:44332/foo ),而不是重定向到错误页面,而是重定向到user-details页。我错过了或需要做些什么才能使其正常工作吗?

NB :按以下方式处理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();
} 

1 个答案:

答案 0 :(得分:1)

问题是:

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

仅仅因为它被命名为id并不意味着它将以某种方式仅采用整数。实际上,您已经创建了一条路线,该路线将捕获任何东西而没有附加的路由段:即/foo将捕获,而/foo/bar将不会捕获。您可以添加一个约束来进行帮助,即"{id:int}",该约束仅在可以将路线段转换为整数时才捕获。