【问题标题】:Is there a way to tap into FormsAuthentication mechanism to add custom headers to responses?有没有办法利用 FormsAuthentication 机制将自定义标头添加到响应中?
【发布时间】:2011-07-19 23:58:51
【问题描述】:

我有一个使用表单身份验证的网络应用程序。

场景如下:

  1. 用户请求 /Default.aspx
  2. 服务器响应 302 Found,对象移至 /login.aspx?ReturnUrl=Default.aspx

有没有办法利用这个 302 响应并向其添加额外的响应标头?

我对添加 Expires: 标头特别感兴趣。

【问题讨论】:

    标签: asp.net forms-authentication


    【解决方案1】:

    其中一种方法是编写自己的表单身份验证模块,但工作量太大。

    另一个(快速破解)解决方案可能是使用 global.asax(或自定义 HTTP 模块)来查看响应 - 您可以使用诸如 PreSendRequestContent 之类的事件来查看当前响应是否为 302 并重定向到登录。 aspx 并在这种情况下添加您的标题。

    【讨论】:

      【解决方案2】:

      解决方法是创建一个 HttpModule 并订阅 EndRequest 事件。

      它将在 FormsAuthentication 模块尝试授权请求并决定返回重定向到登录页面结果后调用。

      类似:

      public class ExpireRedirectsHttpModule : IHttpModule
      {
          public void Init(HttpApplication context)
          {
              context.EndRequest += OneEndRequest;
          }
      
          private void OneEndRequest(object sender, EventArgs e)
          {
              var httpApplication = (HttpApplication)sender;
              HttpContext ctx = httpApplication.Context;
      
              if (ctx == null) return;
      
              if (ctx.Response.StatusCode == (int)HttpStatusCode.Redirect)
              {
                  ctx.Response.Cache.SetExpires(DateTime.UtcNow);
              }
          }
      
          public void Dispose()
          {
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2018-02-26
        • 1970-01-01
        • 2013-12-19
        • 1970-01-01
        • 1970-01-01
        • 2019-09-05
        • 1970-01-01
        • 2019-02-06
        • 2018-10-04
        相关资源
        最近更新 更多