在app.UseStatusCodePages中访问HttpContext

问题描述:

在我的startup.cs中的方法public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)我想访问HttpContext在app.UseStatusCodePages中访问HttpContext

我想这样做的原因是我想重定向401 response to a login page

app.UseStatusCodePages(async context => { 
    var request = context.HttpContext.Request; 
    var response = context.HttpContext.Response; 

    if (response.StatusCode == (int)HttpStatusCode.Unauthorized) 
     // you may also check requests path to do this only for specific methods  
     // && request.Path.Value.StartsWith("/specificPath") 

     { 
      response.Redirect("/account/login"); 
     } 
    }); 

在上述例子context不具有HttpContext属性。我如何访问HttpContext

+0

根据[文档:配置状态代码页(https://docs.microsoft.com/en-us/aspnet/core/fundamentals/error-handling#configuring -status-code-pages),该代码应该工作。唯一的问题是,如果不做任何异步操作,则从expression参数中删除'async'前缀。 – Nkosi

+0

@Nkosi问题是context.HttpContext.Request没有HttpContext,所以必须有一些更多的安装程序丢失... – Liam

+0

分号缺失:response.Redirect(“/ account/login”);代码编译没有错误。 –

您正在尝试使用UseStatusCodePages(此IApplicationBuilder应用程序,Action配置)扩展方法重载。

你应该使用的是UseStatusCodePages(这个IApplicationBuilder应用程序,Func < StatusCodeContext,任务>处理程序)。

事情是这样的:

app.UseStatusCodePages(context => { 
    var request = context.HttpContext.Request; 
    var response = context.HttpContext.Response; 

    if (response.StatusCode == (int)HttpStatusCode.Unauthorized) 
    { 
     response.Redirect("/account/login"); 
    } 

    return Task.CompletedTask; 
});