在事件处理程序中的Image Resizer User.Identity

时间:2012-07-30 22:23:18

标签: asp.net-mvc-4 imageresizer

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

下面不会导致异常,但似乎打破了它。无论是否经过身份验证,都会显示未找到图像的默认图标。 测试过.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。 [授权]在应用程序中正常工作。对这里可能出错的任何建议?

1 个答案:

答案 0 :(得分:4)

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

  1. 删除并重新添加<system.webServer> <modules>中的FormsAuthenticationModule(对于集成模式),删除precondition =“managedHandler”属性:
  2. 启用RAMMFAR(runAllManagedModulesForAllRequests)
  3. 这篇文章包含有关实施#1和#2的更多细节:

    How do I protect static files with ASP.NET form authentication on IIS 7.5?