2014-10-09 3 views
0

В ASP.NET MVC 4 у меня есть приложение с несколькими адресами, которое выполняет некоторую проверку безопасности на первой странице, сохраняет результаты в переменной сеанса, а затем использует OnActionExecuting на каждом контроллере для проверки переменной сеанса при переходе со страницы на страницу. В одном из представлений используется WebGrid с сортируемыми столбцами. Когда я нажимаю на заголовок столбца, чтобы задействовать сортировку, я получаю вызов действия по умолчанию для представления, но в OnActionExecuting переменной Session нет. Кажется, он создал новый сеанс. Затем моя логика рассматривает это как сбой безопасности.С помощью WebGrid с сортируемыми столбцами вызов контроллера обходит сеанс

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

Что я ищу, это способ сохранить сеанс при использовании функции сортировки столбцов WebGrid.

Дополнительной информация: В представлении <th> элементов в WebGrid являются всеми якорями, как <a href="/MyController?sort=MyColumnName?sortdir=ASC">

+0

в вашем ActionMethod, можете ли вы написать '[Authorize]' чуть выше метода? который проверяет, зарегистрирован ли пользователь. Может ли это быть вашим вариантом? –

+1

Я могу посмотреть на это, если не смогу найти решение. Это будет перепроектирование, где мое решение на самом деле в порядке, за исключением WebGrid. –

ответ

0

(я мог бы использовать лучший ответ, но это работает для меня)

Поскольку значение в подразделу на самом деле якорь, я смог обнаружить, что QUERY_STRING всегда содержит «sort =». Таким образом, я мог бы хотя бы проверить это и восстановить отсутствующую переменную безопасности в сеансе, исходя из предположения, что, если я получаю эту строку запроса, пользователь уже прошел тест безопасности.

(filterContext.RequestContext.HttpContext.Request.Params["QUERY_STRING"].Contains("sort="))

Я все еще думаю, что WebGrid не должны начинать новую сессию для меня, но, по крайней мере, этот способ будет заставить меня идти.

ПРИМЕЧАНИЕ ДЛЯ БУДУЩЕЙ СПРАВКИ: Мы использовали установку <system.web><sessionState cookieless="true">. По-видимому, когда WebGrid устанавливает свои ссылки для сортировки, он не обнаруживает этот параметр, поэтому он не включает идентификатор сеанса в URL. Вот почему WebGrid начал новую сессию для нас.

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