1

我有一个映射到 aspnet_isapi.dll 的 HttpHandler 以在经典模式下使用 IIS 7.5 对静态文件(.pdf 文件)执行自定义身份验证检查:

void IHttpHandler.ProcessRequest(HttpContext context)
{
  if(!User.IsMember) {
    Response.Redirect("~/Login.aspx?m=1");
   }
  else {
     //serve static content
   }
}

上面的代码工作正常,除了 else 语句逻辑。在 else 语句中,我只是想让 StaticFileHandler 处理请求,但我无法解决这个问题。任何关于如何简单地将文件“移交”回 IIS 以将请求作为普通 StaticFile 请求提供的建议,我们将不胜感激。

4

1 回答 1

4

要直接回答您的问题,您可以创建一个 StaticFileHandler 并让它处理请求:

// Serve static content:
Type type = typeof(HttpApplication).Assembly.GetType("System.Web.StaticFileHandler", true);
IHttpHandler handler = (IHttpHandler)Activator.CreateInstance(type, true);
handler.ProcessRequest(context);

但更好的想法可能是创建一个 HTTP 模块而不是 HTTP 处理程序:

public class AuthenticationModule : IHttpModule
{
    public void Dispose()
    {
    }

    public void Init(HttpApplication application)
    {
        application.AuthorizeRequest += this.Application_AuthorizeRequest;
    }

    private void Application_AuthorizeRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        if (!User.IsMember)
            context.Response.Redirect("~/Login.aspx?m=1");      
    }
}
于 2012-07-07T00:18:30.180 回答