如何检查当前请求资源是C#ASP.NET中的一个页面?

前端之家收集整理的这篇文章主要介绍了如何检查当前请求资源是C#ASP.NET中的一个页面?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个IHttpModule实现与一个委托方法挂钩到PostAcquireRequestState,对于每个HTTP请求,我想知道如何检查当前请求的资源是否是一个Page(aspx)区分所有其他资源,如* .css,* .ico,* .png等等.

其实我可以做以下事情:

private static void OnPostAcquireRequestState(object sender,EventArgs e)
{
  bool isPage = HttpContext.Current.Request.Path.EndsWith(".aspx");
}

但是,我想知道与“.aspx”的检查有什么不同.

解决方法

您可以做的一件事是获取注册HTTP Handlers的列表,并检查它们是否由系统类处理.假设你不在命名空间System *中命名自己的类,这是非常愚蠢的:
using System.Configuration;
using System.Web.Configuration;

Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
HttpHandleRSSection handlers = (HttpHandleRSSection) config
                               .GetSection("system.web/httpHandlers");

List<string> forbiddenList = new List<string>();

// next part untested:
foreach(HttpHandlerAction handler in handlers.Handlers)
{
    if(handler.Type.StartsWith("System."))
    {
        forbiddenList.Add(handler.Path);
    }
}

或者,您可以还原查找并列出除自己(或当前)域中的所有现有处理程序,可能会提供一些例外(即,如果要覆盖现有的图像处理程序).但是,无论你选择什么,都可以让您充分访问已经注册内容.

注意:反之亦然.你现在似乎想要列出几个路径,而是如果你可以进行白名单(即列出你想要处理的那些扩展名),那么你可以使自己变得容易一些.

猜你在找的C&C++相关文章