MembershipUser user = mp.GetUser(userName, false);
UserData userData = new UserData()
{
Comment = user.Comment,
Email = user.Email,
IsApproved = user.IsApproved,
IsLockedOut = user.IsLockedOut
};
return Json(userData, null, Encoding.UTF8);
}
В представленном фрагменте кода для передачи набора данных о пользователе в виде JSON-данных используется единственный метод Json, которому передается набор данных. Результатом, который получит пользователь в ответ, например, на такой запрос http://localhost:5434/Admin/SelectUserData?userName=adminбудет текст в следующем формате:
{"UserId":null,"Email":"vyunev@live.ru","Comment":"","IsApproved":true, "IsLockedOut":false,"CurrentMembershipUser":null}
Очень часто в ответ на запрос пользователя требуется вернуть не HTML-страницу или данные в формате JSON, а какой-нибудь бинарный файл. FileResult— это механизм, который как раз и позволяет возвратить файл как результат работы действия контроллера.
У FileResultесть два важных свойства, которые требуется указывать при возвращении результата действия:
□ contentType— свойство, которое задается через конструктор класса FileResultи не может быть изменено напрямую. ContentTypeуказывает MIME-тип содержимого передаваемого файла;
□ FileDownloadName— свойство, указывающее на файл, который требуется передать в ответ на запрос.
Рассмотрим использование FileResultна следующем примере. Пусть нам требуется на пользовательский запрос возвращать сопоставленный с пользователем рисунок. Реализуем эту возможность с помощью файловой системы. Для этого создадим в корне проекта папку Admin, в которой будем хранить рисунки пользователей в формате PNG с именем вида: GUID пользователя.рng. Действие GetUserImageконтроллера AdminController, которое будет возвращать изображение с помощью FileResult, представлено в следующем фрагменте:
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текущего контроллера:
Читать дальше
Конец ознакомительного отрывка
Купить книгу