有没有办法利用FormsAuthentication机制向响应添加自定义标头?

时间:2011-07-19 23:58:51

标签: asp.net forms-authentication

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

方案如下:

  1. 用户请求/Default.aspx
  2. 服务器响应302 Found,对象移至/login.aspx?ReturnUrl=Default.aspx
  3. 有没有办法利用这个302响应并为其添加额外的响应标头?

    我特别感兴趣的是添加Expires:header。

2 个答案:

答案 0 :(得分:0)

其中一种方法是编写自己的表单身份验证模块,但这可能太多了。

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

答案 1 :(得分:0)

解决方案是创建一个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()
    {
    }
}