43
Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0 Гайдар Магдануров t: http://twtter.com/gaidar e: [email protected]

Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Embed Size (px)

DESCRIPTION

Краткий обзор ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0.

Citation preview

Page 1: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Гайдар Магдануровt: http://twtter.com/gaidar

e: [email protected]

Page 2: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Платформа ASP.NET

Ядро ASP.NETПроцесс обработки Http запросов, инфраструктура

HttpModule и HttpHandler, интеграция с веб-сервером IIS, модель расширения

Службы ASP.NETКеширование, хранение состояния, маршрутизация, хранение данных пользователей,

поддержка локализация

WebFormsЭлементы управления, модель событий,

источники данных

MVC FrameworkИнфраструктура представлений и контроллеров, поддержка модели

Microsoft AjaxНабор клиентского JavaScript кода и серверных компонентов

Dynamic DataБиблиотека для автоматического создания приложений работающих с данными

4.0

2.0

Page 3: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Ядро и службы ASP.NET 4.0

Page 4: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Автоматический запуск приложений

• Для приложений, требующих длительной инициализации

• Работает на IIS 7.5• Конфигурация в applicationHost.config

<applicationPools> <add name="MyApplicationPool" startMode="AlwaysRunning" /></applicationPools>

Page 5: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Автоматический запуск приложений

<sites> <site name="MySite" id="1"> <application path="/" serviceAutoStartEnabled="true" serviceAutoStartProvider="PrewarmMyCache" > <!-- Additional content --> </application> </site></sites>

<serviceAutoStartProviders> <add name="PrewarmMyCache" type="MyNamespace.CustomInitialization, MyInitLib" /></serviceAutoStartProviders>

Page 6: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Автоматический запуск приложений

• Управление инициализацией приложения• До отработки метода Preload приложение

не принимает запросы

public class CustomInitialization : System.Web.Hosting.IProcessHostPreloadClient { public void Preload(string[] parameters) { } }

Page 7: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Расширенный механизм кеширования

• Возможность добавления собственных провайдеров кеширования– Наследование

System.Web.Caching.OutputCacheProvider• Конфигурирование в web.config• Возможность выбора системы хранения– Локальные или сетевые диски, база данных «в

облаке», системы распределенного кеша

Page 8: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Кеширование: настройка

• Конфигурирование в web.config <caching> <outputCache defaultProvider="AspNetInternalProvider"> <providers> <add name="DiskCache" type=“ChacheProviders.DiskOutputCacheProvider, DiskCacheProvider"/> </providers> </outputCache></caching>

Page 9: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Кеширование: настройка

• По умолчанию AspNetInternalProvider– Хранение данных в памяти

• Возможность назначать провайдеры на уровне страницы и на уровне запроса

Page 10: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Кеширование: уровень страницы

<%@ OutputCache Duration="60" VaryByParam="None" providerName="DiskCache" %>

Page 11: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Кеширование: уровень запроса

• В Global.asax

public override string GetOutputCacheProviderName(HttpContext context)

{ if (context.Request.Path.EndsWith("Advanced.aspx")) return "DiskCache"; else return base.GetOutputCacheProviderName(context);}

Page 12: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Уменьшение размера состояния сеанса

• Использование System.IO.Compression.GZipStream для сжатия состояния

• Особенно актуально для веб-ферм, при хранении состояния в SQL Server или out-of-proc сервере состояния

<sessionState mode="SqlServer" sqlConnectionString="data source=dbserver;Initial Catalog=aspnetstate" allowCustomSqlDatabase="true" compressionEnabled="true" />

Page 13: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Постоянные редиректы

• Метод Response.Redirect выдает 302 Moved Temporary – соответственно лишний обмен по HTTP сообщениями

• PermanentRedirect выдает 301 – Moved Permanently• RedirectPermanent("/new/content.aspx");

– Поисковые системы кешируют страницы с кодом 301 и не запрашивают повторно

Page 14: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Настройки разрешенных URL

• Возможность увеличения длины путей более 260 символов:<httpRuntime maxRequestPathLength="260"

maxQueryStringLength="2048" /> • Контроль допустимых символов в URL

<httpRuntime requestPathInvalidChars="<,>,*,%,&,:,\" />

Page 15: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Валидация запросов

• Создание собственного валидатора запросов регистрация в web.config секции httpRuntime– Наследование System.Web.Util.RequestValidator– <httpRuntime requestValidationType=“MyLib.MyValidator, Samples" />

• Метод IsValidRequestString

public class CustomRequestValidation : RequestValidator { protected override bool IsValidRequestString( HttpContext context, string value, RequestValidationSource requestValidationSource, string collectionKey, out int validationFailureIndex) {...} }

Page 16: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Кодирование URL и HTML

• Создание собственных классов для обработки вызовов при сохранении API– Наследование System.Web.Util.HttpEncoder

• Автоматическая подмена вызовов методов кодирования классов System.Web.HttpUtility и System.Web.HttpServerUtility

• Настойка в web.config<httpRuntime encoderType=“MyLib.MyCustomEncoder,

Samples" />

Page 17: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

• Настройка в файле aspnet.config в директории, куда установлен .NET FW<?xml version="1.0" encoding="UTF-8" ?>

<configuration> <runtime> <appDomainResourceMonitoring enabled="true"/> </runtime> </configuration>

• Новые счетчики в категории ASP.NET Applications - % Managed Processor Time и Managed Memory Used

Мониторинг производительности

Page 18: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

<?xml version="1.0"?> <configuration> <system.web> <compilation targetFramework="4.0" /> </system.web> </configuration>

Меньше настроек в web.config

• Основные параметры конфигурации перенесены в machine.config

• Минимальный достаточный web.config

Page 19: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Web Forms 4.0

Page 20: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET 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"); }}

Page 21: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Маршрутизация

• Параметр checkPhysicalUrlAccess метода MapPageRoute позволяет применить правила доступа, которые определены для физической страницы в web.config

• Коллекция параметров маршрутаPage.RouteData.Values["username"]

Page 22: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Маршрутизация

• Декларативное связывание• Чтение значений параметров

<asp:Label ID="Label1" runat="server" Text="<%$RouteValue:Id%>" />

• Определение параметров<asp:HyperLink ID="HyperLink1" runat="server"

NavigateUrl="<%$RouteUrl:Id=search%>"> Search</asp:HyperLink>

Page 23: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Маршрутизация

• Связь с DataSource

<asp:sqldatasource ...><selectparameters><asp:routeparameter name="companyname"

RouteKey="searchterm" /> </selectparameters> </asp:sqldatasource>

Page 24: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Настройки ViewState

• Наследование ViewState с возможностью наследования

• Атрибут ViewStateMode– Enabled (по умолчанию)– Disabled– Inherit

Page 25: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Поддержка браузеров

• Класс HttpBrowserCapabilities для получения информации о текущем браузере

• blackberry.browser• chrome.browser• Default.browser• firefox.browser• gateway.browser• generic.browser

• ie.browser• iemobile.browser• iphone.browser• opera.browser• safari.browser

Page 26: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Мета-теги страницы

• Свойства Keywords и Descriptions<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Default.aspx.cs" Inherits="_Default" Keywords="These, are, my, keywords" Description="This is a description" %>

• Свойства Page.MetaKeywords и Page.MetaDescription

Page 27: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Управление атрибутом id

• ClientIDMode – AutoID – автоматическая генерация– Static – статические ID– Predictable – Предсказуемые (например, для

Repeater, ClientIDRowSuffix будет PrimaryKey или Object ID)

– Inherit – наследовать от родителя

Page 28: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Управление атрибутом id

• Страница<%@ Page Language="C#" AutoEventWireup="true"

CodeFile="Default.aspx.cs" Inherits="_Default" ClientIDMode="Predictable" %>

• Web.config <system.web>

<pages clientIDMode="Predictable"></pages></system.web>

Page 29: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Управление атрибутом id

<tc:NamingPanel runat="server" ID="ParentPanel" ClientIDMode="Static"> <tc:NamingPanel runat="server" ID="NamingPanel1" ClientIDMode="Predictable"> <asp:TextBox ID="TextBox1" runat="server" Text="Hello!"></asp:TextBox> </tc:NamingPanel> </tc:NamingPanel>

<div id="ParentPanel"> <div id="ParentPanel_NamingPanel1"> <input name="ctl00$ContentPlaceHolder1$ParentPanel$NamingPanel1$TextBox1" type="text" value="Hello!" id="ParentPanel_NamingPanel1_TextBox1" /> </div>

Page 30: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Атрибуты id коллекций

<asp:ListView ID="ListView1" runat="server" ClientIDMode="Predictable" RowClientIDRowSuffix="ProductID"> </asp:ListView>

• rootPanel_ListView1_ProductNameLabel_1• В Repeater нет RowClientIDRowSuffix,

поэтому используется индекс строки

Page 31: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Новое выражение <% : %>

• Автоматическое кодирование вывода на страницу

<%: expression %>Равно<%= HttpUtility.HtmlEncode(expression) %> • Если не нужно кодировать, то <%: new HtmlString("<strong>не энкодить

меня!</strong>") %>

Page 32: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Рендеринг

• Выбор уровня совместимости HTML<system.web><pages

controlRenderingCompatibilityVersion="3.5|4.0"/> </system.web>

• Для «скрытых» div генерируется css class aspNetHidden

• Возможность отключить внешнюю таблицу для контролов FormView, Login, PasswordRecovery, ChangePassword, Wizard, CreateUserWizard

<asp:FormView ID="FormView1" runat="server" RenderOuterTable="false">

Page 33: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Выделение строки в ListView/GridView

• Раньше выделение было по индексу строки• Теперь – по ключу данных

<asp:GridView id="GridView2" runat="server" EnablePersistedSelection="true"> </asp:GridView>

Page 34: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Улучшения контролов

• ListView– Не нужен LayoutTemplate<asp:ListView ID="ListView1" runat="server">

<ItemTemplate> <% Eval("LastName")%> </ItemTemplate> </asp:ListView>

• CheckBoxList– Новые типы Layout = UnorderedList, OrderedList

• Menu– Рендеринг в виде несортированного списка– Скрипты на стороне клиента

Page 35: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

MVC Framework 2.0

Page 36: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Регионы / Area

• Вложенные проекты– Site• Blog• Forum• Shop

Page 37: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Асинхронные контроллеры

• Возможность избежать блокировок тредов из пула тредов 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 }); } }

Page 38: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Валидация и аннотации данных

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; }}

Page 39: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Строгая типизация UI хэлперов

Html.LabelFor (c => c.Name)

Html.EditorFor (c => c.Name)

Html.EditorFor (c => c)

Page 40: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Поддержка шаблонов UI• EditorTemplates• Display Templates• .ascx файлы

Html.EditorFor(c => c.Name, “NameEditor”)

public class Person{ [UIHint(“NameEditor”)] public string Name {get; set;}}

Page 41: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Параметры по умолчанию

public ActionResult ([DefaultValue(10)] int count) {}

public ActionResult (int count = 10) {} // C# 4.0

Page 42: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

Основные ресурсы

• Библиотека MSDN– http://msdn.microsoft.com/en-us/asp.net/default.aspx

• Cайт ASP.NET– http://www.asp.net

• Технические видео по теме– http://www.microsoft.com/rus/web/tech/development.aspx

Page 43: Развитие веб-платформы для разработчика: ASP.NET MVC 2.0 и ASP.NET Web Forms 4.0

СПАСИБО ЗА ВНИМАНИЕ!

Гайдар Магдануровt: http://twtter.com/gaidar

e: [email protected]