2015-09-28 1 views
3

У меня есть действие, с которым мои пользователи могут загрузить файл. URL выглядеть следующим образом:Запрос объекта сеанса имеет значение null, если параметр string заканчивается расширением файла

http://mywebsite.lan/report/GetReport/reportname.xlsx 

Для сервера для обработки имен файлов, как параметр, я должен добавить это в моем web.config:

<system.webServer> 
    <modules> 
     <remove name="UrlRoutingModule-4.0" /> 
     <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" /> 
    </modules> 
</system.webServer> 

действие само по себе работает довольно хорошо, пользователь вызывает URL-адрес, а сервер возвращает файл в параметре.

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

Проблема заключается в том, что при использовании этого URL-адреса объект сеанса имеет значение null в фильтре действий, что приводит к их сбою при попытке получить доступ к клавишам создания на нем. Тем не менее объект сеанса существует в самом действии.

После некоторого отслеживания, я обнаружил, что при добавлении хвостохранилищ/в URL, объект сеанса снова был:

http://mywebsite.lan/report/GetReport/reportname.xlsx/ 

Я не могу показаться, чтобы быть в состоянии найти причину это.

Неужели кто-нибудь еще столкнулся с этой проблемой?

ответ

0

я решил аналогичную проблему, добавив следующие строки в моем файле web.config

<modules> 
    <remove name="Session"/> 
    <add name="Session" type="System.Web.SessionState.SessionStateModule, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
</modules> 

Я думаю, что по умолчанию модуль Session конфигурируется с «managedHandler» предварительное условие.

<add name="Session" type="System.Web.SessionState.SessionStateModule" preCondition="managedHandler" />

и по умолчанию .xlst не связан с управляемым обработчиком и модуль сеанса не работает для .xslt.

Когда вы добавляете «/» в конце URL-адреса, я думаю, что логика «Default Document» запускается где-то, документ по умолчанию, вероятно, является Default.aspx или некоторыми такими, и он включает модуль сеанса. Это чистое предположение, я не проверял.

Или, альтернативно, вы можете связать .xslt с управляемым обработчиком (System.Web.UI.PageHandlerFactory) в IIS -> Отображения обработчиков. Это должно быть, вероятно, еще лучше, потому что мне не нравится, как модуль сеанса теперь запускается для каждого запроса на нашем веб-сайте, но я не пробовал его, потому что в нашем случае не было определенного расширения для связи.

Смежные вопросы