Iza*_*ska 1 asp.net error-handling redirect .net-core asp.net-core
我正在使用 ASP.NET Core 3.0 和 Razor Pages。我正在尝试手动从 Index.cshtml.cs 重定向到自定义 404 错误页面(我有一些导入,并且希望在出现数据问题时显示 404)。
启动.cs:enter code here
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/errors/Error500");
app.UseStatusCodePagesWithReExecute("/errors/Error{0}");
app.UseHsts();
}
...
Run Code Online (Sandbox Code Playgroud)
}
我的 404 错误页面位于 /Errors/Status404.cshtml 中。当我运行应用程序并尝试直接转到 /Errors/Status404 时,页面正在按预期解析。
Index.cshtml.cs 以不同的方式尝试使其工作,不幸的是它们都没有按照我想要的方式工作 - 要么它不执行任何操作,要么它返回系统 404 页面而不是我的自定义 404 页面:
public class IndexModel : PageModel
{
public void OnGet()
{
HttpContext.Response.Clear();
HttpContext.Response.StatusCode = 404;
HttpContext.Response.Redirect("/Errors/Error404");
return StatusCode(404); //tried to return IActionResult from OnGet()
return RedirectToPage();
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试返回上面的 StatusCode(404) 并创建一个自定义过滤器,以便我可以从那里重定向到我的自定义 404,不幸的是,这也会返回服务器 404 错误页面。
错误过滤器:
public class ErrorFilter : Attribute, IAlwaysRunResultFilter
{
public void OnResultExecuting(ResultExecutingContext context)
{
if (context.Result is StatusCodeResult statusCodeResult &&
statusCodeResult.StatusCode == 404)
{
//context.Result = new ObjectResult("Can't process this!")
//{
// StatusCode = 404,
//};
context.HttpContext.Response.Redirect("Errors/Error404");
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何重定向到 Index.cshtml.cs 中或 ErrorFilter 中的自定义错误页面?
您可以使用RedirectToPage辅助方法。例子
return RedirectToPage("Errors/Error404");
Run Code Online (Sandbox Code Playgroud)
而你也需要改变
public void OnGet()
Run Code Online (Sandbox Code Playgroud)
到
public IActionResult OnGet()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10960 次 |
| 最近记录: |