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
текущего контроллера:
Читать дальше
Конец ознакомительного отрывка
Купить книгу