遇到404时,我想重定向到特定页面。
我尝试了一些教程和StatusCodePages,但没有任何效果。
有人有Core 3.1的示例,该示例仅重定向404而不是所有状态代码吗?
答案 0 :(得分:1)
有两个选项,它们都应在.Net Core中工作。将此添加到web.config文件:
<customErrors mode="Off">
<error statusCode="404" redirect="~/errorPages/PageNotFound.aspx" />
</customErrors>
或者您可以仅在Startup.cs中添加自己的中间件,而不使用诊断程序包:
app.Use(async (context, next) =>
{
if(context.Response.Status == 404)
{
// return page
}
else
{
await next.Invoke();
}
// loggin
});
答案 1 :(得分:0)
很简单。
app.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
对于此示例,在家庭控制器中,创建一个名为Error的方法,该方法采用整数。
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
[Route("Home/Error/{statusCode}")]
public IActionResult Error(int statusCode)
{
var error = new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier };
// Error caused by something other than a 404 should not be processed here.
if (statusCode != 404)
{
return View(error);
}
// Logic that handles 404 errors goes here.
}
现在,所有异常都将路由到此方法,但是通过检查状态码,您可以针对404错误设置一些特定的逻辑。