【发布时间】:2011-07-19 23:58:51
【问题描述】:
我有一个使用表单身份验证的网络应用程序。
场景如下:
- 用户请求 /Default.aspx
- 服务器响应 302 Found,对象移至 /login.aspx?ReturnUrl=Default.aspx
有没有办法利用这个 302 响应并向其添加额外的响应标头?
我对添加 Expires: 标头特别感兴趣。
【问题讨论】:
标签: asp.net forms-authentication
我有一个使用表单身份验证的网络应用程序。
场景如下:
有没有办法利用这个 302 响应并向其添加额外的响应标头?
我对添加 Expires: 标头特别感兴趣。
【问题讨论】:
标签: asp.net forms-authentication
其中一种方法是编写自己的表单身份验证模块,但工作量太大。
另一个(快速破解)解决方案可能是使用 global.asax(或自定义 HTTP 模块)来查看响应 - 您可以使用诸如 PreSendRequestContent 之类的事件来查看当前响应是否为 302 并重定向到登录。 aspx 并在这种情况下添加您的标题。
【讨论】:
解决方法是创建一个 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()
{
}
}
【讨论】: