ASP.NET - 在Global.asax中检测ASPX页面请求与其他事物

时间:2009-10-13 14:34:32

标签: asp.net

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

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

查看“aspx”的URL似乎不对,因为当他们请求根页面(例如myapp.com/或myapp.com/products)时,它将无效。它看起来很脆弱。

谢谢,

~Justin

7 个答案:

答案 0 :(得分:3)

我建议你为此创建HTTP模块。 HTTP模块完全适用于此类任务。

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

答案 1 :(得分:2)

ASP.Net框架已经开始识别aspx页面v / s了。为什么又一样呢?而是利用已识别的处理程序然后相应地采取行 如果是Application_PreRequestHandlerExecute处理程序,则this.Context.Handler属性由框架设置。检查此属性的类型以匹配ASPX页面类的类型。你在Global.asax.cs中的代码看起来像这样:

var objA = {
    "Red Chair" : "DC10291",
    "USBDongle" : "USKI82322",
},

 arrayB = [
   {
       field: "Yellow Banana",
       id: "Yellow Banana"
   },
   {
       field: "Red Chair",
       id: "Red Chair"
   },
   {
       field: "Garden",
       id: "Garden"
   }
],

 arrayC = arrayB.reduce((p,c) => !objA[c.field] ? p.concat(c) : p, []);
 console.log(arrayC);
 arrayB.reduceRight((p,c,i,a) => (p[c.field] && a.splice(i,1),p),objA);
 console.log(arrayB);

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

void Application_BeginRequest(object sender,EventArgs e)      {

    string pathAndQuery = Request.Url.PathAndQuery.ToString();

    if (pathAndQuery.Contains(".aspx"))
    //etc

尽管用正则表达式检查而不是包含

可能更好 编辑:对不起,错过了你的最后两行...不知道你有子目录

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

在.Net 4.0及更高版本中,您可以查看...

HttpContext.Current.Request.CurrentExecutionFilePathExtension

应返回“.aspx”

您将获得没有任何Querystring值的正确扩展名,即使您的请求是针对默认页面(例如“www.myhost.com/myfolder /").

答案 6 :(得分:0)

如果您使用的是路由/友好网址,则可以使用HttpRequest.GetFriendlyUrlFileExtension()扩展方法(在Microsoft.AspNet.FriendlyUrls程序集中)获取基础文件类型(例如" .aspx")