在我的asp.net core应用程序中,每次发生错误后,请求的地址都会更改为站点错误页面地址,如何在错误页面中检索原始请求的地址?
启动.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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
错误.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
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,您可以使用以下代码获取原始路径:
[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 });
}
Run Code Online (Sandbox Code Playgroud)
结果:
由于您使用了 razor 页面的 statuscode re-execute 方法,因此您应该使用 IStatusCodeReExecuteFeature。
更多详细信息,您可以参考以下代码:
public void OnGet()
{
var feauter = Request.HttpContext.Features.Get<IStatusCodeReExecuteFeature>();//=null
var path = feauter?.OriginalPath;//=null
RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1281 次 |
| 最近记录: |