c# - Asp.net core:如何通过 404 状态码获取错误页面中的原始路径
问题描述
在我的asp.net核心应用程序中,每次发生错误后,请求的地址都会更改为站点错误页面地址如何在错误页面中检索原始请求的地址?
启动.cs:
public class Startup
{
private const string ErrorHandlingPath = "/Error";
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseExceptionHandler(ErrorHandlingPath);
app.UseStatusCodePagesWithReExecute(ErrorHandlingPath);;
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
}
错误.cshtml.cs
public class ErrorModel : PageModel
{
public void OnGet()
{
var status = HttpContext.Response.StatusCode;//=404
var originalPath = HttpContext.Request.Path.Value;//=Error
var feauter = Request.HttpContext.Features.Get<IExceptionHandlerPathFeature>();//=null
var path = feauter?.Path;//=null
}
}
解决方案
据我所知,您可以使用以下代码获取原始路径:
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
//var re = HttpContext.Request.Path;
var feauter = Request.HttpContext.Features.Get<IExceptionHandlerPathFeature>();
var path = feauter.Path;
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
结果:
更新
由于您使用了剃须刀页面的状态码重新执行方法,因此您应该使用 IStatusCodeReExecuteFeature。
更多细节,您可以参考以下代码:
public void OnGet()
{
var feauter = Request.HttpContext.Features.Get<IStatusCodeReExecuteFeature>();//=null
var path = feauter?.OriginalPath;//=null
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
}
推荐阅读
- python - 如何将系列值添加到日期/日期时间对象?
- python - 如何用 pip 安装 PIL?
- restsharp - RestSharp 访问 API 的方法
- javascript - 我无法在功能性 React 组件中使用带有 useEffect 的内联“if”吗?
- javascript - Java Script 按值过滤嵌套对象属性
- c# - NullableAttribute 在另一个模块中声明,需要导入 - ILRepack
- c# - Razor-pages 通过 HttpClient 使用凭据上传文件
- python - 在多索引熊猫数据框中添加每个级别 2 索引的总数
- php - Laravel 安装程序在创建新项目时抛出错误
- android - android:nextFocusDown 在 viewpager 中不起作用