2017-09-16 84 views
0

在我的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」);代碼編譯沒有錯誤。 –

回答

0

您正在嘗試使用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; 
}); 
相關問題