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

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

Жанры

Шрифт:

public ActionResult GetUserImage(string userName)

{

if (string.IsNullOrEmpty(userName))

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

MembershipProvider mp = Membership.Provider;

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

if (user == null)

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

string userGuidString = ((Guid) user.ProviderUserKey).ToString;

string fileName = userGuidString + ".png";

return File(fileName, "image/png");

}

Обратите

внимание, что для возвращения результата типа FileResult в примере используется стандартный метод контроллера File, который упрощает возврат результата в виде FileResult. Методу File передается два параметра: путь к возвращаемому файлу и его MIME-тип, который в данном случае для PNG-файла равен image/png.

В MVC Framework существует еще один класс для работы с файлами — класс FileContentResult, который наследует от FileResult и позволяет возвращать данные не на основании пути к файлу, а с помощью существующего потока данных, который может генерироваться в самом действии.

RedirectResult и RedirectToRouteResult

Важным свойством MVC Framework является возможность перенаправлять запрос на другие действия контроллеров либо другие URL-адреса. Для этого в MVC встроены механизмы RedirectResult и RedirectToRouteResult, которые наследуют от ActionResult и являются допустимыми результатами работы любого действия.

RedirectResult предназначен для того, чтобы возвратить результат пользователю в виде перенаправления на заданный адрес URL. У RedirectResult есть только одно свойство, которое инициализируется через конструктор, — Url, оно указывает строку адреса, на которую будет перенаправлен пользователь в ответ на запрос. Контроллеры MVC содержат стандартный метод Redirect, который формирует ответ в виде RedirectResult. В следующем фрагменте приведено действие, результатом которого является перенаправление пользователя на сайт http://www.asp.net/mvc/:

public ActionResult GetAspNetSite

{

return Redirect("http://www.asp.net/mvc/");

}

RedirectToRouteResult выполняет схожую по смыслу с RedirectResult логику, но перенаправление вызова RedirectToRouteResult производится только на основании маршрутов таблицы маршрутизации. RedirectToRouteResult имеет два конструктора, с разным числом параметров, всего параметров два:

? routeName — указывает наименование маршрута, на который нужно выполнить перенаправление запроса;

? routeValues — указывает набор значений параметров маршрута типа RouteValueDictionary, с помощью которых производится поиск маршрута и выполняется перенаправление.

Для упрощения работы с RedirectToRouteResult механизм MVC реализует для контроллеров, наряду с методами RedirectToRoute, набор стандартных методов RedirectToAction, которые призваны облегчить формирование перенаправления вызова на другие действия или контроллеры. Например, следующий фрагмент кода перенаправляет вызов из текущего действия в действие Index текущего контроллера:

return RedirectToAction("Index");

При использовании RedirectToAction можно указывать и контроллер, в который требуется перенаправить вызов, кроме того, можно указать набор значений параметров маршрута типа RouteValueDictionary. Следующий пример кода перенаправит вызов на действие Index контроллера AccountController:

return RedirectToAction("Index", "Account");

ContentResult

ContentResult —

это весьма простая реализация ActionResult, которая предназначена для того, чтобы в ответ на запрос передавать любой пользовательский строковый набор данных. Для реализации логики у ContentResult есть три свойства:

? ContentType — MIME-тип передаваемых в ответ на запрос данных;

? ContentEncoding — кодировка данных;

? Content — строка данных для передачи в ответ на запрос.

Благодаря ContentResult разработчик получает возможность генерировать ответы на запросы в любом виде, который можно представить в виде строки текста. Этот тип ActionResult может быть полезен при работе с механизмом RenderAction. RenderAction — это часть библиотеки MVCContrib, которая содержит расширения MVC Framework, не вошедшие в основной функционал. RenderAction позволяет представлению вывести в месте вызова результат выполнения действия. При таком применении результат типа ContentResult подходит более всего. Для упрощения контроллеры содержат специальный метод Content, который возвращает значение типа ContentResult.

EmptyResult

Последний из рассмотренных стандартных вариантов ActionResult — это EmptyResult. Этот механизм предназначен для того, чтобы в ответ на запрос не возвращать ничего. Переопределенный в EmptyResult метод ExecuteResult не содержит ни строчки кода.

Создание своей реализации ActionResult

Важной особенностью механизма ActionResult является то, что вы можете создать свой собственный вариант, который будет формировать результат в том виде, который вам нужен. Например, вы можете разработать класс, наследующий ActionResult, который будет возвращать клиентам результаты запроса в виде XML-разметки. Классическим примером создания своего варианта ActionResult является реализация класса, который на запрос пользователя создает ответ в виде RSS-ленты. Продемонстрируем реализацию такого класса, добавив к нашему контроллеру AdminController действие Rss, которое будет возвращать пользователю RSS-ленту со списком зарегистрированных пользователей.

Первым делом создадим класс RssResult, который наследует ActionResult, как показано в листинге 4.6.

Листинг 4.6. Класс RssResult

namespace MVCBookProject {

using System.Web.Mvc; using System.Xml;

using System.ServiceModel.Syndication;

public class RssResult : ActionResult {

public SyndicationFeed Feed { get; set; }

public RssResult(SyndicationFeed feed)

{

Feed = feed;

}

public override void ExecuteResult(ControllerContext context)

{

context.HttpContext.Response.ContentType =

"application/rss+xml";

Rss20FeedFormatter formatter = new Rss20FeedFormatter(Feed);

using (XmlWriter writer =

XmlWriter.Create(context.HttpContext.Response.Output))

{

if (writer != null)

formatter.WriteTo(writer);

}

}

}

}

Обратите внимание, для реализации своего варианта ActionResult в классе RssResult мы перегружаем метод ExecuteResult, который и выполняет всю необходимую логику по формированию того результата, который получит клиент в своем браузере в ответ на запрос.

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

Точка Бифуркации VIII

Смит Дейлор
8. ТБ
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Точка Бифуркации VIII

60-я параллель

Успенский Лев Васильевич
Проза:
военная проза
5.00
рейтинг книги
60-я параллель

Бешеный прапорщик. Части 1-9

Зурков Дмитрий
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.95
рейтинг книги
Бешеный прапорщик. Части 1-9

Олигарх-подкаблучник

Калинина Дарья Александровна
Сыщицы-любительницы Кира и Леся
Детективы:
иронические детективы
6.25
рейтинг книги
Олигарх-подкаблучник

Князь Андер Арес 5

Грехов Тимофей
5. Андер Арес
Фантастика:
историческое фэнтези
фэнтези
героическая фантастика
5.00
рейтинг книги
Князь Андер Арес 5

Собрание сочинений-5.Тьма над Диамондианой

Ван Вогт Альфред Элтон
5. Собрание сочинений
Фантастика:
научная фантастика
5.00
рейтинг книги
Собрание сочинений-5.Тьма над Диамондианой

Я вас люблю

Муравьева Ирина Лазаревна
Семейная сага
Проза:
современная проза
6.25
рейтинг книги
Я вас люблю

Романов. Том 1 и Том 2

Кощеев Владимир
1. Романов
Фантастика:
фэнтези
попаданцы
альтернативная история
5.25
рейтинг книги
Романов. Том 1 и Том 2

Дорога ветров

Уильямс Тэд
3. Орден Манускрипта
Фантастика:
фэнтези
7.75
рейтинг книги
Дорога ветров

Методы статистического анализа исторических текстов (часть 2)

Фоменко Анатолий Тимофеевич
Научно-образовательная:
история
5.00
рейтинг книги
Методы статистического анализа исторических текстов (часть 2)

Поварское искусство

Зеленко П. М.
Дом и Семья:
кулинария
6.25
рейтинг книги
Поварское искусство

100 великих династий

Жадько Елена Григорьевна
100 великих
Справочная литература:
энциклопедии
6.25
рейтинг книги
100 великих династий

Банковское право

Рождественская Татьяна Эдуардовна
Деловая литература:
банковское дело
5.00
рейтинг книги
Банковское право

Голос ночной птицы

МакКаммон Роберт Рик
1. Мэтью Корбетт
Детективы:
исторические детективы
8.97
рейтинг книги
Голос ночной птицы