如何确定传入请求是针对控制器(或任何其他资源)?

时间:2011-10-22 14:36:00

标签: asp.net-mvc-3 nhibernate httprequest

当我分发数据库会话时(我正在使用NHibernate),我试图帮助减少,以便只有当传入的请求是针对需要会话的对象时才会提出一个。

我知道有一种方法可以获取HttpApplication中的信息,这可以让我确定这一点,但我不确定它是否像我想的那样直截了当,或者我是否必须实现一些基于路线请求......等

有人可以推荐一些我可以查看确定此请求的方法吗?我已经回顾了HttpApplication类和一些属性/方法,并假设它将在HttpContext.Current.Request.RequestContext中的某个地方出现,但我想我会看到是否有一种简单的方法。

2 个答案:

答案 0 :(得分:3)

这来自Oyvind Valland's Blog,他正在查找我正在寻找的内容,并检查所请求资源的传入请求以确定是否需要会话。朱利安·玛格丽特斯库(Julian Margarintescu)提出了一个很好的观点,但是如果出于某种其他原因需要回答实际问题的答案。

private static readonly string[] NoPersistenceFileExtensions = new string[] { ".jpg", ".jpeg", ".gif", ".png", ".css", ".js", ".swf", ".xap", ".ico" };    
private static bool RequestMayRequirePersistence(HttpApplication httpApplication)
{
if (httpApplication == null)
return false;

HttpContext context = httpApplication.Context;
if (context == null)
return false;

string fileExtension = Path.GetExtension(context.Request.PhysicalPath);
return fileExtension != null && Array.IndexOf(NoPersistenceFileExtensions, fileExtension.ToLower()) < 0;
}

答案 1 :(得分:1)

您应该阅读Ayende关于cost of opening a session的这篇文章。空/未使用的会话非常轻,您可以为任何请求创建它们,因为它们不会打开数据库连接。