Asp.net core:如何通过404状态码获取错误页面中的原始路径

Meh*_*hdi 2 c# asp.net-core

在我的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)

Bra*_*ang 5

据我所知,您可以使用以下代码获取原始路径:

    [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)

在此输入图像描述