我有一个ASP.NET应用程序,如果请求是针对普通的ASPX页面,我想设置一些额外的HTTP标头(与页面过期相关)。但是,我不想为图像,AXD处理程序或静态HTML页面等添加这些标题。
在Global.asax请求开始处理程序中检测当前请求是否适用于ASP.NET页面的最佳方法是什么?
查看“aspx”的URL似乎不对,因为当他们请求根页面(例如myapp.com/或myapp.com/products)时,它将无效。它看起来很脆弱。
谢谢,
~Justin
答案 0 :(得分:3)
我建议你为此创建HTTP模块。 HTTP模块完全适用于此类任务。
答案 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")