Как пропустить статические http-запросы при использовании одного UoW на http-запрос - PullRequest
0 голосов
/ 10 марта 2011

Я использую один NHibernate UoW на каждый запрос http в моем веб-приложении .net mvc 2.Мне было просто интересно, как я могу пропустить создание UoW для статических http-запросов, таких как изображения.

Ответы [ 3 ]

1 голос
/ 11 марта 2011

Вы можете преобразовать реализацию своей единицы работы в реализацию IActionFilter вместо HttpModule.Таким образом, OnActionExecuting вы можете начать свою единицу работы и OnActionExecuted вы можете закончить единицу работы.Затем просто примените его к своим контроллерам и действиям, которые выполняют обработку данных.

0 голосов
/ 11 марта 2011

вы можете использовать интерфейс маркера IRequiresSessionState.

private void BeginTransaction(object sender, EventArgs e)
{
     HttpApplication app = (HttpApplication)source;
     if (app.Context.Handler is IRequiresSessionState) {
        // do work
     }
}

staticfilehandler не применяет Session к запросу.

0 голосов
/ 10 марта 2011

Я не уверен, что StaticFileHandler действительно выдает Begin / EndRequest, но я не думаю.Если вы заметили, что он запускается для ваших статических файлов, я предполагаю, что ваш порядок обработчиков неправильный или подстановочные знаки для обработчиков неверны.

Если вы сопоставляете «*» с вашим обработчиком MVC, возможно, вам может понадобиться переместить статический контент в подпапку, переопределить web.config, очистить все обработчики и добавить только StaticFileHandler для этого.

Я заметил, что вы упомянули, что вы используете IHttpModule для UoW, так что я предполагаю, что вы угоняете его для каждого запроса.

Вы можете сделать это:

создать подпапку, которую вы называете, например, "/ static /", и переместить ваши статические файлы сюда.В этой папке создайте файл web.config, содержащий следующее:

<handlers>
    <clear />
    <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="Either" requireAccess="Script" />
</handlers>

и удалите модуль UoW здесь (возможно, вам понадобится только эта строка)

<modules>
    <remove name="YourUoWModuleName" />
</modules>
...