ЖАНРЫ

Шрифт:

Следует учесть, что перегрузка запросов возможна только для POST-запросов. Во всех других случаях скрытый параметр X-HTTP-Method-Override игнорируется.

DefauItValueAttribute

С помощью атрибута System.ComponentModel.DefaultValueAttribute в MVC 2 становится возможным указывать значения по умолчанию для параметров действий.

public class ArticleController

{

public ActionResult View(int id, [DefaultValue(1)]int page)

{

}

}

В

приведенном ранее примере для параметра page определяется значение по умолчанию, которое следует использовать в случаях, когда запрос не содержал явного указания значения для данного параметра. Эта задача может быть решена для всех действий сразу через создание параметров маршрутизации по умолчанию. Но в случаях, когда требуется создать разные значения по умолчанию для разных действий, может быть использован атрибут DefaultValue.

RequireHttpsAttribute

Новый атрибут RequireHttpsAttribute в MVC 2 позволит вам пометить действия, вызов которых должен быть произведен только по защищенному протоколу HTTPS.

Улучшения в связывании данных

ASP.NET MVC 2 предоставит новую возможность по связыванию данных. Теперь в MVC 2 связывание данных возможно и с бинарными типами данных, представленными byte[] и System.Data.Linq.Binary. Для этих целей введены два новых перегруженных метода расширения Hidden:

public static string Hidden(this HtmlHelper htmlHelper, string name, Binary value);

public static string Hidden(this HtmlHelper htmlHelper, string name, byte[] value);

После использования этих методов для бинарных данных в разметке будет произведен рендеринг скрытого элемента hidden со строкой данных, закодированной по base-64. После отправки запроса с формы, которая содержит данный скрытый элемент, его данные будут декодированы и связаны с соответствующим значением модели.

Прочие улучшения в API

Кроме перечисленных ранее значительных нововведений, ASP.NET MVC 2 предложит еще ряд менее значительных изменений в API:

? новый защищенный виртуальный метод createActioninvoker в классе controller, который вызывается свойством Actioninvoker и позволяет создавать отложенное создание экземпляра (instantiation) инициатора, если он не установлен;

? новый защищенный виртуальный метод OnAuthorizationFailed в классе AuthorizationFilter, который позволяет фильтрам авторизации отрабатывать ситуации, когда авторизация была провалена;

? новый метод Add(stringkey, object value) у класса ValueProviderDictionary, который позволяет проще задавать значения для экземпляров класса;

? новое свойство ActionDescriptor в классе AuthorizationContext;

? метод Controller.Execute теперь вызовет исключение в ситуации, когда он вызван более одного раза в одном экземпляре. Это означает явное ограничение на вызов единственного экземпляра контроллера на каждый запрос;

? класс Controller более не наследуется от MarshalByRefObject;

? конструктор AuthorizationContext(ControllerContext context)

объявлен устаревшим, вместо него предлагается использовать вариант с двумя параметрами;

? внесены изменения в типы моделей так, что они теперь могут быть не только ссылочными типами, но и значениями. Например, в MVC 2 можно будет использовать System.Int32 как тип модели;

? поиск контроллеров в пространстве имен, указанном при регистрации маршрутов, теперь будет выполняться и в подпространствах имен.

Кроме нововведений, MVC 2 содержит изменения, которые "ломают" совместимость с существующим кодом:

? из класса DefaultControllerFactory исключено свойство RequestContext, вместо этого значение RequestContext передается в методы GetControllerinstance и GetControllerType. Это изменение нарушает работу пользовательских вариантов фабрики контроллеров, которые наследовались от класса DefaultControllerFactory;

? строковое значение area в MVC 2 стало зарезервированным значением, которое нельзя использовать в качестве параметров маршрута при создании маршрутизации. В этом area стало похоже на бывшие ранее зарегистрированными строки controller и action;

? методы расширения хелпер-классов (вспомогательных классов) отныне возвращают MvcHtmlString, вместо строки. Это нововведение рассчитано на использование в окружении ASP.NET 4.0 для получения преимуществ от нового синтаксиса элементов HTML-кодирования;

? действия, которые возвращают JsonResult, в MVC 2 обязаны вызываться только в ответ на POST-запросы, это ограничение введено в целях повышения безопасности, поскольку обнаружены новые типы атак JSON Hijacking, осуществляемые при GET-запросах JSON-данных. Однако MVC 2 будет поддерживать способ обойти это ограничение через использование свойства JsonRequestBehavior у класса JsonResult;

? свойства Model и ModelType объявлены устаревшими, вместо них предлагается использовать новое свойство ModelMetadata, которое содержит в себе данные Model и ModelType.

Нововведения Visual Studio 2010

Релиз Visual Studio 2010 будет содержать финальную версию ASP.NET MVC 2. Для более полной поддержки работы с MVC в Visual Studio 2008 и 2010 будут внесены некоторые изменения: введена поддержка создания областей с помощью элементов интерфейса и помощников, добавлены сниппеты (snippet — фрагмент) для быстрого создания кусочков кода.

Кроме того, MVC 2 будет содержать новый тип проекта, который будет представлять собой облегченный, "пустой" вариант текущего проекта MVC. В нем будут отсутствовать готовые контроллеры AccountController, HomeController и не будет готовых представлений или элементов страниц MasterPage.

Visual Studio 2010 получит новый профиль среды разработки под названием Web Development (Code Optimized). Профиль среды разработки определяет набор инструментов и внешний вид Visual Studio. Профиль Code Optimized оптимизирован для более удобного набора кода и увеличения рабочего пространства за счет сокрытия панелей с кнопками и элементами управления.

Поделиться с друзьями: