2

为图像访问限制添加了 AuthorizeImage 事件处理程序。当我尝试检查用户名和身份验证状态时注意到以下内容:

下面不会导致异常,但似乎会破坏它。无论是否经过身份验证,都会显示未找到图像的默认图标。测试了 this.User = 相同的结果。HttpContext.Current.User = 相同的结果

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e)
{
    if (context.User.Identity.IsAuthenticated) { context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); }    
};

以下工作正常(this.User 和 HttpCONtext.Current.User 也是如此)

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e)
{
    context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); 
};

这总是重定向

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e)
{
    if (context.User == null)
        context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif");
};

我开始在 Application_Start 中进行测试,但实际上也尝试了 Application_PostAuthenticateRequest。虽然结果哪里一样。我通过自定义代码进行身份验证,但使用标准格式验证来设置 cookie。[Authorize] 在应用程序中工作正常。对这里可能出了什么问题有什么建议吗?

4

1 回答 1

4

您的服务器配置为仅针对某些请求扩展名(例如 .aspx、.ashx 等)运行 FormsAuthenticationModule。有两种方法可以解决此问题。

  1. 在(对于集成模式)中删除并重新添加 FormsAuthenticationModule <system.webServer> <modules>,删除 precondition="managedHandler" 属性:
  2. 启用 RAMMFAR (runAllManagedModulesForAllRequests)

这篇文章包含有关实现 #1 和 #2 的更多详细信息:

如何在 IIS 7.5 上使用 ASP.NET 表单身份验证保护静态文件?

于 2012-07-31T12:04:13.230 回答