【问题标题】:Accessing HttpContext in app.UseStatusCodePages在 app.UseStatusCodePages 中访问 HttpContext
【发布时间】:2021-12-10 17:47:47
【问题描述】:

在我的startup.cs 方法中public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 我想访问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

【问题讨论】:

  • 根据documentation: Configuring status code pages,该代码应该可以工作。唯一的事情是,如果不做任何异步操作,则从表达式参数中删除 async 前缀。
  • @Nkosi 问题是 context.HttpContext.Request 没有 HttpContext 所以必须缺少一些设置......
  • 缺少分号:response.Redirect("/account/login");代码正在编译,没有错误。

标签: .net asp.net-core asp.net-core-1.0


【解决方案1】:

您正在尝试使用 UseStatusCodePages(this IApplicationBuilder app, Action configuration) 扩展方法重载。

你应该使用的是 UseStatusCodePages(this IApplicationBuilder app, Func handler)。

类似这样的:

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

【讨论】:

    【解决方案2】:

    我有同样的问题。然后在我的代码上方添加 using Microsoft.AspNetCore.Http; 语句,如https://github.com/aspnet/Docs/issues/8118 所述。这解决了我的情况。

    【讨论】:

      【解决方案3】:

      你需要使用重载方法:

      public static IApplicationBuilder UseStatusCodePages(this IApplicationBuilder app, StatusCodePagesOptions options);
      

      因此,只需明确指定您的类型,您就可以访问HttpContext 对象:

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

      【讨论】:

        猜你喜欢
        • 2019-11-17
        • 2010-12-10
        • 2011-08-23
        • 1970-01-01
        • 1970-01-01
        • 2015-09-23
        • 2022-01-16
        • 1970-01-01
        相关资源
        最近更新 更多