【问题标题】:ASP.NET - in Global.asax detect ASPX page request vs. other thingsASP.NET - 在 Global.asax 中检测 ASPX 页面请求与其他内容
【发布时间】:2009-10-13 14:34:32
【问题描述】:

我有一个 ASP.NET 应用程序,如果请求是针对普通 ASPX 页面的,我想在其中设置一些额外的 HTTP 标头(与页面过期相关)。但是,我不想为图像、AXD 处理程序或静态 HTML 页面等添加这些标头。

在 Global.asax 请求开始处理程序中检测当前请求是针对 ASP.NET 页面的最佳方法是什么?

查看“aspx”的 URL 对我来说似乎是错误的,因为当他们请求根页面(例如 myapp.com/ 或 myapp.com/products)时,它就不起作用了。而且它看起来很脆弱。

谢谢,

~贾斯汀

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    我建议您为此创建 HTTP 模块。 HTTP 模块正是为此类任务而设计的。

    http://www.15seconds.com/Issue/020417.htm

    【讨论】:

    • 我认为在这种情况下实现一个 HTTP 模块来添加一个 HTTP 标头是多余的。我们已经在广泛使用 HTTP 模块,我不想增加混乱。不过谢谢你的想法。
    • 听起来是最适合我的方法
    【解决方案2】:

    ASP.Net 框架已经在做识别aspx 页面v/s 的工作。为什么又做同样的事情?而是利用已识别的处理程序,然后采取相应的行动。 如果是 Application_PreRequestHandlerExecute 处理程序,则 this.Context.Handler 属性由框架设置。检查此属性的类型以匹配 ASPX 页面类的类型。 Global.asax.cs 中的代码如下所示:

    protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            if(this.Context.Handler is System.Web.UI.Page)
            {
                //Do what you need to do for aspx requests
            }
        }
    

    这种方法有利于在所有 url 路由和重写条件下工作,并且绝对优于(在我看来)对 URL 进行任何类型的字符串比较。

    【讨论】:

      【解决方案3】:

      您可以使用 HttpContext.Current.Request.CurrentExecutionFilePath 并查看是否以“.aspx”结尾。

      【讨论】:

      • 嗯,这似乎是一种相当安全的方法。
      • 如果使用页面路由将友好的 Url 映射到实际页面,则不起作用。
      【解决方案4】:

      void Application_BeginRequest(对象发送者,EventArgs e) {

          string pathAndQuery = Request.Url.PathAndQuery.ToString();
      
          if (pathAndQuery.Contains(".aspx"))
          //etc
      

      尽管使用正则表达式而不是包含检查可能会更好

      编辑:抱歉,错过了你的最后两行......不知道你有子目录

      但您不必检查 aspx 文件。将处理 iis 中映射到 aspnet_isapi.dll 的所有内容。你可以这样做:

          if (!pathAndQuery.Contains(".axd")){ //etc.
      

      【讨论】:

        【解决方案5】:

        对于文件夹级缓存过期设置,您可以在 IIS 上进行。 看看这个:http://www.software-architects.com/TechnicalArticles/CachinginASPNET/tabid/75/Default.aspx#iis

        【讨论】:

          【解决方案6】:

          .Net 4.0及以上版本,可以查看...

          HttpContext.Current.Request.CurrentExecutionFilePathExtension
          

          应该返回“.aspx”

          即使您的请求是针对默认页面(例如“www.myhost.com/myfolder/”),您也将获得正确的扩展而不需要任何 Querystring 值。

          【讨论】:

            【解决方案7】:

            如果您使用路由/友好 URL,您可以使用 HttpRequest.GetFriendlyUrlFileExtension() 扩展方法(在 Microsoft.AspNet.FriendlyUrls 程序集中)获取底层文件类型(例如“.aspx”)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2011-07-12
              • 1970-01-01
              • 2018-01-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多