首页 > 解决方案 > 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
        }
    }

标签: c#asp.net-core

解决方案


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

    [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;
    }

在此处输入图像描述


推荐阅读