Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0 Гайдар Магдануров t: e: m: +7 (905)
Платформа ASP.NET Ядро ASP.NET Процесс обработки Http запросов, инфраструктура HttpModule и HttpHandler, интеграция с веб-сервером IIS, модель расширения Службы ASP.NET Кеширование, хранение состояния, маршрутизация, хранение данных пользователей, поддержка локализация WebForms Элементы управления, модель событий, источники данных MVC Framework Инфраструктура представлений и контроллеров, поддержка модели Microsoft Ajax Набор клиентского JavaScript кода и серверных компонентов Dynamic Data Библиотека для автоматического создания приложений работающих с данными
Ядро и службы ASP.NET 4.0
Автоматический запуск приложений Для приложений, требующих длительной инициализации Работает на IIS 7.5 Конфигурация в applicationHost.config
Автоматический запуск приложений
Автоматический запуск приложений Управление инициализацией приложения До отработки метода Preload приложение не принимает запросы public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient { public void Preload(string[] parameters) { } }
Расширенный механизм кеширования Возможность добавления собственных провайдеров кеширования – Наследование System.Web.Caching.OutputCacheProvider Конфигурирование в web.config Возможность выбора системы хранения – Локальные или сетевые диски, база данных «в облаке», системы распределенного кеша
Кеширование: настройка Конфигурирование в web.config
Кеширование: настройка По умолчанию AspNetInternalProvider – Хранение данных в памяти Возможность назначать провайдеры на уровне страницы и на уровне запроса
Кеширование: уровень страницы
Кеширование: уровень запроса В Global.asax public override string GetOutputCacheProviderName(HttpContext context) { if (context.Request.Path.EndsWith("Advanced.aspx")) return "DiskCache"; else return base.GetOutputCacheProviderName(context); }
Уменьшение размера состояния сеанса Использование System.IO.Compression.GZipStream для сжатия состояния Особенно актуально для веб-ферм, при хранении состояния в SQL Server или out-of-proc сервере состояния
Постоянные редиректы Метод Response.Redirect выдает 302 Moved Temporary – соответственно лишний обмен по HTTP сообщениями PermanentRedirect выдает 301 – Moved Permanently RedirectPermanent("/new/content.aspx"); – Поисковые системы кешируют страницы с кодом 301 и не запрашивают повторно
Настройки разрешенных URL Возможность увеличения длины путей более 260 символов: Контроль допустимых символов в URL,*,%,&,:,\" />
Валидация запросов Создание собственного валидатора запросов регистрация в web.config секции httpRuntime – Наследование System.Web.Util.RequestValidator – Метод IsValidRequestString public class CustomRequestValidation : RequestValidator { protected override bool IsValidRequestString( HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) {...} }
Кодирование URL и HTML Создание собственных классов для обработки вызовов при сохранении API – Наследование System.Web.Util.HttpEncoder Автоматическая подмена вызовов методов кодирования классов System.Web.HttpUtility и System.Web.HttpServerUtility Настойка в web.config
Настройка в файле aspnet.config в директории, куда установлен.NET FW Новые счетчики в категории ASP.NET Applications - % Managed Processor Time и Managed Memory Used Мониторинг производительности
Меньше настроек в web.config Основные параметры конфигурации перенесены в machine.config Минимальный достаточный web.config
Web Forms 4.0
Маршрутизация Cвойства для работы с маршрутами HttpRequest.RequestContext и Page.RouteData Определение маршрута public class Global : System.Web.HttpApplication { void Application_Start(object sender, EventArgs e) { RouteTable.Routes.MapPageRoute("SearchRoute", "search/{searchterm}", "~/search.aspx"); RouteTable.Routes.MapPageRoute("UserRoute", "users/{username}", "~/users.aspx"); } }
Маршрутизация Параметр checkPhysicalUrlAccess метода MapPageRoute позволяет применить правила доступа, которые определены для физической страницы в web.config Коллекция параметров маршрута Page.RouteData.Values["username"]
Маршрутизация Декларативное связывание Чтение значений параметров " /> Определение параметров "> Search
Маршрутизация Связь с DataSource
Настройки ViewState Наследование ViewState с возможностью наследования Атрибут ViewStateMode – Enabled (по умолчанию) – Disabled – Inherit
Поддержка браузеров Класс HttpBrowserCapabilities для получения информации о текущем браузере blackberry.browser chrome.browser Default.browser firefox.browser gateway.browser generic.browser ie.browser iemobile.browser iphone.browser opera.browser safari.browser
Мета-теги страницы Свойства Keywords и Descriptions Свойства Page.MetaKeywords и Page.MetaDescription
Управление атрибутом id ClientIDMode – AutoID – автоматическая генерация – Static – статические ID – Predictable – Предсказуемые (например, для Repeater, ClientIDRowSuffix будет PrimaryKey или Object ID) – Inherit – наследовать от родителя
Управление атрибутом id Страница Web.config
Управление атрибутом id
Атрибуты id коллекций rootPanel_ListView1_ProductNameLabel_1 В Repeater нет RowClientIDRowSuffix, поэтому используется индекс строки
Новое выражение Автоматическое кодирование вывода на страницу Равно Если не нужно кодировать, то не энкодить меня! ") %>
Рендеринг Выбор уровня совместимости HTML Для «скрытых» div генерируется css class aspNetHidden Возможность отключить внешнюю таблицу для контролов FormView, Login, PasswordRecovery, ChangePassword, Wizard, CreateUserWizard
Выделение строки в ListView/GridView Раньше выделение было по индексу строки Теперь – по ключу данных
Улучшения контролов ListView – Не нужен LayoutTemplate CheckBoxList – Новые типы Layout = UnorderedList, OrderedList Menu – Рендеринг в виде несортированного списка – Скрипты на стороне клиента
MVC Framework 2.0
Регионы / Area Вложенные проекты – Site Blog Forum Shop
Асинхронные контроллеры Возможность избежать блокировок тредов из пула тредов ASP.NET public class MyController : AsyncController { public void MyActionAsync(string value) { AsyncManager.OutstandingOperations.Increment(); MyService myService = new MyService(); myService.GetDataCompleted += (sender, e) => { AsyncManager.Parameters[data"] = e.Value; AsyncManager.OutstandingOperations.Decrement(); }; myService.GetDataAsync(city); } public ActionResult MyActionCompletd(string[] data) { return View(MyData", new MyData { DataLines = date }); } }
Валидация и аннотации данных public class PersonController { [HttpPost] public ActionResult Update(Person p){ if(!ModelState.IsValid)... } public class Person { [Required(ErrorMessage = *)] [StringLength(32, ErrorMessage = Лимит – 32 символа)] public string LastName { get; set; } }
Строгая типизация UI хэлперов Html.LabelFor (c => c.Name) Html.EditorFor (c => c.Name) Html.EditorFor (c => c)
Поддержка шаблонов UI EditorTemplates Display Templates.ascx файлы Html.EditorFor(c => c.Name, NameEditor) public class Person{ [UIHint(NameEditor)] public string Name {get; set;} }
Параметры по умолчанию public ActionResult ([DefaultValue(10)] int count) {} public ActionResult (int count = 10) {} // C# 4.0
Основные ресурсы Библиотека MSDN – Cайт ASP.NET – Технические видео по теме –
СПАСИБО ЗА ВНИМАНИЕ! Гайдар Магдануров t: e: m: