Как я могу определить, является ли входящий запрос для контроллера (или любого другого ресурса в этом отношении)? - PullRequest
1 голос
/ 22 октября 2011

Я пытаюсь помочь уменьшить время, когда я раздаю сеанс базы данных (я использую NHibernate), чтобы он выдавался только один раз, если входящий запрос относится к объекту, который требует сеанс.

Я знаю, что есть способ получить информацию в приложении HttpApplication, которая позволила бы мне определить это, но я не уверен, насколько она прямолинейна, как мне хотелось бы, или мне нужно реализовать некоторую логику, основанную на запрос маршрута ... и т. д.

Может кто-нибудь порекомендовать, как я могу рассмотреть запрос на определение этого? Я рассмотрел класс HttpApplication и ряд свойств / методов и предположил, что он будет где-то в HttpContext.Current.Request.RequestContext, но я подумал, что увижу, есть ли простой способ сделать это.

Ответы [ 2 ]

3 голосов
/ 31 октября 2011

Это из блога Ойвинда Валланда , который делал именно то, что я искал, и проверял входящий запрос на запрашиваемый ресурс, чтобы определить, нужен ли сеанс. Джулиан Маргаринтеску делает хорошее замечание, но для ответа на реальный вопрос в случае, если это было необходимо по какой-то другой причине.

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 голос
/ 23 октября 2011

Вам следует прочитать это сообщение Айенде о стоимости открытия сессии .Пустые / неиспользуемые сеансы настолько легки, что вы можете создать их для любого запроса, поскольку они не будут открывать соединение БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...