iis 如何在HttpContext中查看请求是否是针对托管/非托管资源的?

fzwojiic  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(160)

我正在开发一个IIS模块,当我的Web服务器上的所有页面发出请求时,该模块将被触发(托管和非托管)。为了实现这一点,我实现了IHttpModule接口,该接口具有一个必须实现的名为HandleRequest的方法。在方法上下文中,我可以访问HttpApplication对象和HttpContext对象。对象或任何其他位置来告知现在由模块处理的请求是被发布到托管页面(例如,aspx、asmx、web-api、mvc、wcf)还是被发布到非托管页面(例如,jpg、css、htm..)。
代码如下:

public class MyPreIISReqeustModule : System.Web.IHttpModule
{
  public void Dispose()
    {

    }

  public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(HandleRequest);
    }
  protected void HandleRequest(Object sender, EventArgs e)
    {
        if (managed_page_request)
           {......}
        else
           {......}
    }
 }

字符串

vmjh9lq9

vmjh9lq91#

我发现自己处于同样的情况,无法找到任何简单的属性来指示请求是否是托管的。所以我所做的就是检查Request中的文件是否存在于文件系统中。如果它存在,那么我假设这不是托管请求;否则它是。所以,在你的HandleRequest()方法中:

HttpApplication application = (HttpApplication)source;

if (!System.IO.File.Exists(application.Request.PhysicalPath)) {
    // file does not exist; assume this is a managed request
} else{
    // file does exist; so this request isn't managed
}

字符串
它可能并不完美,但它很好地满足了我的需要。边缘情况下,你可能可以显式地处理。

相关问题