Чтение онлайн

на главную - закладки

Жанры

Шрифт:

ASP.NET MVC предлагает разработчику гибкий механизм управления проверкой параметров запроса. Для такого управления существует атрибут ValidateInputAttribute. Для демонстрации действия этого атрибута добавим в нашу форму редактирования параметров Select.aspx возможность редактирования поля Comment, которое будет содержать любой текст, в том числе и с HTML-разметкой. Данное поле будет выводиться вместе с отображаемым именем пользователя, играя роль сообщения для пользователя.

Изменим форму ввода, добавив следующий фрагмент кода:

<label for="comment">Комментарий</label>

<%=Html.TextArea("comment", user.Comment) %>

Соответственно

изменим определение действия Update контроллера AdminController:

[AcceptVerbs(HttpVerbs.Post)]

[Authorize(Users = "Admin")]

[ValidateAntiForgeryToken]

public ActionResult Update(Guid? userId, string email,

string comment, bool isApproved, bool isLockedOut)

{

if (!userId.HasValue)

throw new HttpException(404, "Пользователь не найден");

MembershipProvider mp = Membership.Provider;

MembershipUser user = mp.GetUser(userId, false);

user.Email = email;

user.Comment = comment;

user.IsApproved = isApproved;

if (user.IsLockedOut && !isLockedOut) user.UnlockUser;

mp.UpdateUser(user);

return RedirectToAction("Index");

}

Для того чтобы пользователь видел сообщение, модифицируем частичное представление LogOnUserControl.ascx так, как показано в листинге 4.4.

Листинг 4.4. Представление LogOnUserControl.ascx

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>

<%

if (Request.IsAuthenticated) {

%>

Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!

[ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]

<%= Membership.GetUser(Page.User.Identity.Name).Comment %>

}

else {

%>

[ <%= Html.ActionLink("Log On", "LogOn", "Account") %> ]

<%

}

%>

После запуска попробуем добавить в поле комментария для любого из пользователей значение <b>добрый день! </b> и сохранить изменения. Так как механизм проверки ввода включен по умолчанию, мы получим сообщение об ошибке (рис. 4.9).

Чтобы отключить проверку ввода для данного действия, для него необходимо добавить атрибут validateinputAttribute так, как показано во фрагменте:

[AcceptVerbs(HttpVerbs.Post)]

[Authorize(Users = "Admin")]

[ValidateAntiForgeryToken]

[ValidateInput(false)]

public ActionResult Update(Guid? userId, string email,

string comment, bool isApproved, bool isLockedOut)

Атрибут ValidateInput

с параметром false указывает механизму ASP.NET MVC на то, что проверка параметров запроса для данного действия не требуется. После указания этого значения атрибута мы сможем задавать для значения Comment данные с HTML-тегами. Сообщение будет выведено рядом с именем пользователя, как показано на рис. 4.10.

Механизм атрибута ValidateInputAttribute позволяет в ряде случаев предоставить пользователю больший функционал, но использовать его следует с большой осторожностью. Отключая встроенный механизм проверки параметров запроса на опасное содержимое, вы таким образом берете на себя все проверки, связанные с вопросами безопасности. ValidateInputAttribute с параметром false должен использоваться только в тех местах, где он действительно необходим, в общем случае его применение не рекомендуется и его следует избегать.

Атрибуты ActionFilterAttribute и OutputCacheAttribute

Существует еще один способ расширения механизма ASP.NET MVC. Через атрибут ActionFilterAttribute разработчик может задать выполнение кода по нескольким событиям, происходящим при работе механизма MVC. Вот следующие события, на которые можно реагировать с помощью определения атрибута ActionFilterAttribute: перед выполнением действия, после выполнения действия, перед исполнением результата и после исполнения результата.

Атрибут ActionFilterAttribute представляет собой абстрактный класс с четырьмя виртуальными методами: OnActionExecuting, OnActionExecuted, onResultExecuting, onResultExecuted. Реализация атрибута ложится на плечи разработчика. Обработка этих событий может быть полезна, например, для реализации механизма логов с целью вычисления времени исполнения действий. Другим вариантом использования может быть модификация HTTP-заголовков для ответа клиенту. Таким образом работает включенный в состав ASP.NET MVC атрибут OutputCacheAttribute.

OutputCacheAttribute предназначен для управления стандартными HTTP-заголовками, влияющими на кэширование веб-страниц браузером пользователя. Разработчикам классического ASP.NET этот механизм знаком по директиве @ OutputCache для ASPX-страниц и ASCX-компонентов. OutputCacheAttribute может быть определен как для класса контроллера, так и для отдельного действия. Для управления действием у OutputCacheAttribute есть ряд параметров:

? Duration — значение времени в секундах, на которое производится кэширование;

Поделиться:
Популярные книги

Том 3. Советский и дореволюционный театр

Луначарский Анатолий Васильевич
3. Собрание сочинений в восьми томах
Документальная литература:
критика
5.00
рейтинг книги
Том 3. Советский и дореволюционный театр

Последний реанорец. Том I и Том II

Павлов Вел
1. Высшая Речь
Фантастика:
фэнтези
7.80
рейтинг книги
Последний реанорец. Том I и Том II

Свободное радио Альбемута (сборник)

Дик Филип Киндред
Шедевры фантастики
Фантастика:
научная фантастика
5.00
рейтинг книги
Свободное радио Альбемута (сборник)

"Фантастика 2025-31". Компиляция. Книги 1-27

Трофимов Ерофей
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Фантастика 2025-31. Компиляция. Книги 1-27

"Фантастика 2023-201. Компиляция. Книги 1-26

Кароль Елена
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2023-201. Компиляция. Книги 1-26

Мусаси

Ёсикава Эйдзи
Исторический роман
Фантастика:
фэнтези
6.25
рейтинг книги
Мусаси

Аристократ из прошлого тысячелетия

Еслер Андрей
3. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Аристократ из прошлого тысячелетия

А.и Б. Стругацкие. Собрание сочинений в 10 томах. Т.3

Стругацкие Аркадий и Борис
3. Собраниния сочинений в 10 томах
Фантастика:
научная фантастика
7.17
рейтинг книги
А.и Б. Стругацкие. Собрание сочинений в 10 томах. Т.3

Магнатъ

Кулаков Алексей Иванович
4. Александр Агренев
Приключения:
исторические приключения
8.83
рейтинг книги
Магнатъ

Victory значит победа

Tora_san
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Victory значит победа

А. Смолин, ведьмак. Цикл

Васильев Андрей Александрович
А. Смолин, ведьмак
Фантастика:
городское фэнтези
5.00
рейтинг книги
А. Смолин, ведьмак. Цикл

Том 5. Рассказы 1860 ? 1880 гг.

Ожешко Элиза
Проза:
классическая проза
5.00
рейтинг книги
Том 5. Рассказы 1860 ? 1880 гг.

Королевская кровь - 2

Котова Ирина Владимировна
Фантастика:
героическая фантастика
5.60
рейтинг книги
Королевская кровь - 2

"Фантастика 2025-106" Компиляция. Книги 1-15

Александрова Марина
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
альтернативная история
постапокалипсис
фэнтези
5.00
рейтинг книги
Фантастика 2025-106 Компиляция. Книги 1-15