c# - 自定义 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();
}
解决方案
问题是:
options.Conventions.AddPageRoute("/user-details", "{id}");
仅仅因为它被命名id
并不意味着它会以某种方式只接受整数。您基本上创建了一条无需额外路线段即可捕获任何东西的路线:即/foo
会捕获,但/foo/bar
不会捕获。您可以添加一个约束来帮助,即"{id:int}"
只有当路由段可以转换为 int 时才会捕获。
推荐阅读
- javascript - 非零正浮点数的正则表达式
- sql-server - 递归查询以使用初始查询中返回的日期作为后续查询的限制
- shopify - 如何让产品页面上的所有应用程序在主页上的特色产品部分工作?
- flutter - 您如何正确地在颤动中全局存储来自 POST 的数据?
- sql - 在 postgresql 中展平子数组
- java - java.lang.NullPointerException,当使用 Selenium 和 cucumber 进行自动化测试时
- php - 我的 Symfony 应用程序在生产中崩溃,因为它找不到 WebProfilerBundle,我怎样才能让它工作?
- amazon-web-services - AWS 中无服务器应用程序的性能测试
- javascript - 如何在 jsPDF 中正确设置图像大小以使图像不模糊?
- r - 如何制作表格,包括 R 中调查的权重?