我正在将 ASP.NET Core Razor Pages 与 Identity 结合使用。我以标准方式使用StatusCodePages 中间件:
app.UseStatusCodePagesWithReExecute("/Error", "?statusCode={0}");
在该 razor 页面中,我可以打开状态代码以呈现 401、403、404 和“其他”(400..599 范围内的所有其他代码)的不同内容。然而这会变得混乱;我更喜欢单独的页面。
所以代替这个:
- /Pages/Error.cshtml
我要这个:
- /Pages/401.cshtml
- /Pages/403.cshtml
- /Pages/404.cshtml
- /Pages/400_599.cshtml
那可能吗?
我已经知道的丑陋的解决方法:
- 我可以使用 URL 模板
"/Error/{0}"
,但这不切实际:我必须为 400..599 范围内的每个代码定义一个单独的页面。我绝对不能这样做。 - 在“/Pages/Error.cshtml.cs”页面模型类中,我可以根据状态代码重定向到不同的页面。我不想这样做,我怀疑这对搜索引擎优化不利。
- 对于“/Error”端点,我可以使用带有视图的 MVC 控制器(而不是 Razor Pages);操作方法可以返回适当的视图。不错的解决方案,但增加了不必要的复杂性;我更喜欢 Razor Pages 方法。
当然可以,只需在
Pages
文件夹中创建页面,如下所示:然后
app.UseStatusCodePagesWithReExecute("/{0}")
在Program.cs中使用:对于 catch-all 页面,您可以维护错误页面,如下所示:
程序.cs: