Обзор ASP.NET
ASP.NET — бесплатная интернет-платформа для создания замечательных веб-сайтов и веб-приложений с помощью HTML, CSS и JavaScript. Также можно создавать веб-API и использовать технологии реального времени, такие как веб-сокеты.
Начало работы
Установите Visual Studio 2019 Community Edition — бесплатную интегрированную среду разработки для ASP.NET в Windows.
Сайты и веб-приложения
ASP.NET предоставляет три платформы для создания веб-приложений: веб-формы, ASP.NET MVC и веб-страницы ASP.NET. Все три платформы стабильны и полноценны: замечательные веб-приложения можно создать с помощью любой из них. Независимо от того, какую платформу выберете, вы везде получите все преимущества и возможности ASP.NET.
Каждая платформа предназначена для определенного стиля разработки. Ваш выбор зависит от сочетания навыков программирования (знаний, опыта разработки), типа создаваемого приложения и удобного вам подхода к разработке.
Ниже приведен обзор каждой из платформ и некоторые идеи о выборе между ними. Если вы предпочитаете введение в видео, см. статью создание веб- сайтов с помощью ASP.NET и что такое Web Tools?
Веб-формы
С веб-формами ASP.NET можно создавать динамические веб-сайты, используя знакомую модель перетаскивания, управляемую событиями. Область конструирования и сотни элементов управления и компонентов позволяют быстро создавать комплексные сайты с эффективным пользовательским интерфейсом и доступом к данным.
ASP.NET MVC предлагает эффективный, основанный на шаблонах способ создания динамических веб-сайтов, который позволяет четко разделять проблемы и дает полный контроль над разметкой для увлекательных и гибких разработок. ASP.NET MVC содержит множество функций, позволяющих вести быструю TDD-совместимую разработку для создания сложных приложений, использующих новейшие веб-стандарты.
Веб-страницы ASP.NET
Веб-страницы ASP.NET и синтаксис Razor обеспечивают быстрый, понятный и простой способ объединения серверного кода с HTML для создания динамического веб-содержимого. Подключайтесь к базам данных, добавляйте видео, ссылки на сайты социальных сетей и множество других дополнительных функций, чтобы создавать прекрасные сайты, которые соответствуют новейшим веб-стандартам.
Примечания о веб-формах, MVC и веб-страницах
Кроме того, эти три платформы не полностью независимы друг от друга и выбор одной из них не препятствует использованию другой. Так как платформы могут сосуществовать в одном и том же веб-приложении, некоторые компоненты приложений, написанные с помощью разных платформ, встречаются нечасто. Например, клиентские части приложения могут быть разработаны в MVC для оптимизации разметки, тогда как доступ к данным и административные части разрабатываются в веб-формах для использования преимуществ элементов управления данными и простого доступа к данным.
Веб-API
Технологии в реальном времени
ASP.NET SignalR — это новая библиотека для разработчиков ASP.NET, которая упрощает разработку веб-функций в режиме реального времени. SignalR обеспечивает двунаправленную связь между сервером и клиентом. Серверы могут мгновенно отправлять содержимое подключенным клиентам по мере доступности. SignalR поддерживает веб-сокеты и обращается к другим совместимым методам для старых браузеров. SignalR включает API для управления подключениями (например, события подключения и отключения), группирования соединений и авторизации.
Мобильные приложения и сайты
ASP.NET может работать с собственными мобильными приложениями с помощью серверной части веб-API, а также мобильных веб-сайтов, использующих такие платформы разработки, как начальная загрузка Twitter. При создании собственного мобильного приложения можно легко создать веб-API на основе JSON для управления доступом к данным, проверкой подлинности и Push-уведомлениями для приложения. Если вы создаете реагирующий мобильный сайт, вы можете использовать любую платформу CSS или открытую систему сетки или выбрать мощную мобильную систему, например jQuery Mobile или Sencha, а также замечательные мобильные приложения с PhoneGap.
Одностраничные приложения
Одностраничные приложения ASP.NET (SPA) позволяют создавать приложения, включающие значительное взаимодействие на стороне клиента, с использованием HTML 5, CSS 3 и JavaScript. Visual Studio включает шаблон для создания одностраничных приложений с помощью knockout.js и веб-API ASP.NET. Помимо встроенного шаблона SPA-шаблоны, созданные сообществом разработчиков, также доступны для загрузки.
Веб-перехватчики
Веб-перехватчик — это упрощенный HTTP-шаблон, обеспечивающий простую модель подписки для связи друг с другом веб-API и SaaS-служб. Когда в службе происходит событие, зарегистрированным подписчикам отправляется уведомление в форме POST HTTP-запроса. Запрос POST содержит сведения о событии, благодаря чему получатель может выполнить соответствующие действия.
Веб-перехватчики используются в большом количестве служб, включая Dropbox, GitHub, Instagram, MailChimp, PayPal, Slack, Trello и многих других. Например, веб-перехватчик может указывать, что файл был изменен в Dropbox, изменение кода зафиксировано в GitHub, платеж был инициализирован в PayPal или была создана карточка в Trello.
Мастер-страницы
— это средство ASP.NET, разработанное специально для стандартизации компоновки веб-страниц. Мастер-страницы представляют собой шаблоны веб-страниц, которые могут определять фиксированное содержимое и объявлять часть веб-страницы, куда можно помещать нестандартное содержимое. При использовании одной и той же мастер-страницы во всем веб-сайте компоновка гарантированно будет одинаковой. Более того, если изменить определение мастер-страницы после ее применения, то все использующие ее веб-страницы автоматически воспримут это изменение.
Чтобы можно было обеспечить практическое и гибкое решение для создания шаблонов страниц, должен быть удовлетворен ряд требований:
Должна существовать возможность определения части страницы отдельно и повторного ее использования во множестве страниц.
Должна существовать возможность создания фиксированной компоновки, определяющей редактируемые области. В страницах, повторно использующих этот шаблон, можно будет добавлять или модифицировать содержимое только в разрешенных областях.
Должна быть возможность ограниченной настройки элементов, повторно используемых на каждой странице.
Должна существовать возможность связывания страницы с шаблоном страницы декларативно (без кода) или со страницей динамически во время выполнения.
Должна обеспечиваться возможность проектирования страницы, использующей шаблон страницы, с помощью таких инструментов, как Visual Studio.
Мастер-страницы соответствуют всем этим требованиям. Они обеспечивают систему для повторного использования шаблонов, способ ограничения модификации шаблонов и широкую поддержку во время проектирования.
Например, на обычном веб-сайте мастер-страница может включать фиксированный элемент, например, верхний колонтитул, и заполнитель содержимого для остальной части страницы. Страница содержимого получает этот колонтитул и предоставляет дополнительное содержимое.
Чтобы лучше понять, как это работает, давайте рассмотрим пример.
Простая мастер-страница
Второй, более важный, элемент управления ContentPlaceHolder определен в разделе и представляет видимое содержимое страницы. Чтобы создать более сложные компоновки страницы, можно добавить дополнительную разметку и элементы управления ContentPlaceHolder.
Элемент управления ContentPlaceHolder не имеет никаких примечательных свойств. Ниже приведен пример кода, в котором создается мастер-страница со статическим баннером, элементом управления ContentPlaceHolder и нижним колонтитулом:
Мастер-страницу нельзя запрашивать напрямую. Чтобы использовать мастер-страницу, потребуется создать связанную страницу содержимого.
Простая страница содержимого
Для использования созданной мастер-страницы в другой веб-странице необходимо добавить атрибут MasterPageFile к директиве Page. Этот атрибут показывает имя файла требуемой мастер-таблицы:
Обратите внимание, что атрибут MasterPageFile начинается с пути
/, который указывает корневую папку веб-сайта.
Чтобы предоставить содержимое для элемента управления ContentPlaceHolder, используется другой специализированный элемент управления, называемый Content. Элемент управления ContentPlaceHolder и Content связаны отношением «один к одному». Для каждого элемента управления ContentPlaceHolder в мастер-странице страница содержимого предоставляет соответствующий элемент управления Content (если для данной области вообще должно предоставляться содержимое).
ASP.NET связывает элемент управления Content с соответствующим элементом управления ContentPlaceHolder, сопоставляя ID элемента ContentPlaceHolder со свойством Content. ContentPlaceHolderID соответствующего элемента управления Content. Если создать элемент управления Content, который будет ссылаться на несуществующий элемент управления ContentPlaceHolder, во время выполнения возникнет ошибка.
Таким образом, чтобы создать полную страницу содержимого, которая использует мастер-страницу SiteTemplate, нужно просто заполнить содержимое для элемента управления ContentPlaceHolder с идентификатором ContentPlaceHolder1. Ниже приведен код всей страницы:
В этом примере директива Page задает атрибуты MasterPageFile и Title. Атрибут Title позволяет указать заголовок страницы содержимого, заменяя таким образом заголовок, который задан в мастер-странице. Этот вариант будет работать в том случае, если в дескрипторе задан атрибут runat=»server» (это делается по умолчанию).
Как видите, страницы содержимого совершенно пусты, поскольку они не включают никаких деталей, определенных в мастер-странице. Более того, это облегчает обновление веб-сайта. Для этого достаточно модифицировать одну мастер-страницу. До тех пор пока сохраняются одни и те же элементы управления ContentPlaceHolder, существующие страницы содержимого будут работать, и будут вставляться в любую указанную новую компоновку. Этот пример страницы содержимого показан на рисунке ниже:
Для динамического конфигурирования мастер-страницы или страницы содержимого можно воспользоваться событием Page.Load в любом классе. В некоторых случаях код инициализации придется помещать и в мастер-страницу, и в страницу содержимого. В таких ситуациях важно понять порядок, в котором генерируются соответствующие события.
Мастер-страницы и форматирование
Можно также воспользоваться более детальной моделью, благодаря которой мастер-страница поможет применять различное форматирование к разным разделам страницы содержимого. Для этого достаточно установить подходящие цвета фона и переднего плана, шрифты и опции выравнивания с помощью дескрипторов контейнера в мастер-странице. Например, их можно задать в таблице, ячейке таблицы, дескрипторе
Содержимое по умолчанию
В предыдущем примере содержимое по умолчанию добавляется к тексту баннера, который мы не переопределяли в странице содержимого:
Страницы содержимого не могут использовать только часть содержимого по умолчанию, а также изменять его. Это невозможно, потому что содержимое по умолчанию хранится только в мастер-странице, а не в странице содержимого. В результате придется либо использовать содержимое по умолчанию в том виде, каком оно существует, либо заменять его полностью.
Мастер-страницы и относительные пути
Ничего не подозревающий разработчик может быть ошеломлен тем, каким образом мастер-страницы обрабатывают относительные пути. При использовании только статического текста это не имеет значения. Однако при добавлении дескрипторов или любого другого HTML-дескриптора, указывающего на другой ресурс, может возникнуть проблема.
Проблема проявится в том случае, если мастер-страница и использующая ее страница содержимого оказываются в разных каталогах. Такую практику рекомендуется применять для крупных веб-сайтов. В Microsoft предлагается предусмотреть специальную папку для хранения всех мастер-страниц. Однако при невнимательном использовании этот подход может породить проблемы, связанные с относительными путями.
Предположим, например, что мастер-страница была помещена в подпапку по имени MasterPages и в мастер-страницу был добавлен следующий дескриптор :
Если файл \MasterPages\banner.jpg существует, то, на первый взгляд, все работает нормально. Изображение будет даже появляться в среде проектирования Visual Studio. Однако если создать страницу содержимого в другой подпапке, то путь будет интерпретироваться по отношению к этой папке. Если в ней не будет этого файла, то вместо изображения вы получите неработающую ссылку. Более того, если какое-то изображение будет храниться в файле с таким же именем, вы получите еще и неверное изображение.
Для решения этой проблемы можно попробовать заранее записать свой URL-адрес относительно страницы содержимого, в которой его нужно использовать. Но это создает путаницу, ограничивает места использования мастер-страницы и оказывает нежелательный побочный эффект неправильного отображения мастер-страницы в среде проектирования.
Можно также применять синтаксис указания пути к корневому каталогу и начинать URL-адрес с символа тильды (
) или точки. Например, следующий дескриптор однозначно указывает на файл baner.jpg в подпапке MasterPages веб-сайта:
К сожалению, этот синтаксис подходит только для элементов управления серверной стороны. Если вы хотите получить аналогичный эффект с обычным элементом HTML, понадобится изменить ссылку на полный относительный путь, включающий доменное имя. В результате получается громоздкая и непереносимая HTML-разметка, поэтому данный способ применять не рекомендуется.
Сервер и публикация приложения
Сервер
Традиционно приложения ASP.NET развертывались на веб-сервере IIS. Однако поскольку ASP.NET Core имеет кроссплатформенную природу, потребовалось отвязать ASP.NET Core от IIS и в целом от Windows. И на данный момент для развертывания приложения ASP.NET Core поддерживает развертывание приложения на следующих веб-серверах:
IIS и IIS Express, а также предоставляет возможность запускать приложение без IIS в рамках собственного процесса с помощью двух дополнительных http-серверов, которые идут вместе с ASP.NET Core:
Microsoft.AspNetCore.Server.HttpSys (или просто WebListener) (в предыдущих версиях ASP.NET Core назывался WebListener)
Microsoft.AspNetCore.Server.Kestrel (или просто Kestrel)
HTTP.sys и Kestrel представляют два дополнительных http-серверов, которые идут вместе с ASP.NET Core. HTTP.sys работает только на платформе Windows, а Kestrel является кроссплатформенным.
Кроме того, если приложение использует Kestrel, то в качестве прокси-сервера оно может использовать также IIS, Apache и Nginx. То есть Apache, Nginx или IIS будут получать запросы и перенаправлять их приложению, которое работает на Kestrel. Такая схема, когда запросы идут не напрямую на Kestrel, проходят черех IIS/Apache/Nginx, позволяет нам задействовать возможности, которые есть у этих веб-серверов, но отсутствуют у Kestrel.
IIS и IIS Express
AspNetCoreModule
При получении первого запроса к приложению AspNetCoreModule запускает процесс для этого приложения и перезапускает процесс, если приложение падает.
Вначале все входящие запросы проходят через драйвер Http.Sys, который перенаправляет их на IIS на основной порт (80) или на порт SSL (443). Затем запрос от IIS перенаправляется приложению ASP.NET Core на определенный порт, на котором запущено приложение (любой другой порт, отличный от 80/443). Веб-сервер Kestrel получает запрос и передает его в виде объекта HttpContext в конвейер middleware ASP.NET Core. Конвейер middleware в приложении обрабатывает запрос и возвращает IIS результат обработки, который затем посылается HTTP-клиенту (например, веб-бразеру).
Для использования модуля он должен быть установлен. Он распространяется в рамках пакета ASP.NET Core Server Hosting Bundle. Но при установки Visual Studio с ASP.NET Core модуль AspNetCoreModule уже автоматически устанавливается для IIS Express / IIS, поэтому разработчикам, как правило, не придется его дополнительно доустанавливать.
Мы можем вызвать этот метод явно в файле Program.cs:
Однако это необязательно делать, поскольку при запуске приложения через IIS система автоматически вызывает данный метод.
Среди преимуществ использования именно IIS, а не Kestrel следует отметить работу со статическими файлами. В стандартном веб-приложении ASP.NET Core за взаимодействие со статическими файлами отвечает middleware StaticFiles, которое было рассмотрено в одной из предыдущих тем. Но на данный момент оно слабо отптимизировано и не поддерживает кэширование. И если мы используем чистый Kestrel, то он при обращении к статическим файлам каждый раз считывает их из файловой системы. А если мы используем IIS в качестве прокси для сервера, то мы можем воспользоваться встроенными возможностями IIS по кэшированию. В частности, IIS кэширует ранее считанный с диска статический файл и при последующих обращениях к нему берет этот файл из кэша, тем самым увеличивая производительность.
Kestrel
Kestrel представляет кроссплатформенный веб-сервер, основанный на кросплатформенной библиотеке асинхронного ввода/вывода libuv. Kestrel по умолчанию включается в проект ASP.NET Core.
Однако при настройке хоста мы можем явным образом вызвать метод UseKestrel для конфигурации сервера:
Свойство Limits устанавливает предельные значения для различных конфигурационных настроек. Так, свойство MaxConcurrentConnections задает максимально количество оновременно открытых соединений.
Свойство MaxRequestBodySize устанавливает максимальный размер для запроса в байтах.
Свойство MinRequestBodyDataRate задает минимальную скорость передачи данных в запросе в байтах в секунду.
Свойство MinResponseDataRate задает минимальную скорость передачи данных в исходящем потоке в байтах в секунду.
При развертывании на Windows Kestrel может применять IIS в качестве прокси-сервера, а при развертывании на Linux как прокси-серверы могут использоваться Apache и Nginx. Но также Kestrel может работать самостоятельно внтури своего процесса без IIS.
Так, по умолчанию в Visual Studio доступны две возможности для запуска: с проксированием через IIS и напрямую.
При выборе возможностей вариантов запуска мы можем по умолчанию встретить два профиля:
IIS Express (запуск с проксированием через IIS Express)
Запуск приложения с помощью Kestrel довольно прост, нам не надо устанавливать и настраивать другие веб-серверы. Однако специалисты Microsoft рекомендуют такой способ запуска преимущественно в рамках локальной внутренней сети. А если приложение открыто для глобальной сети интернет, то рекомендумым способом запуска для обеспечения большей безопасности является именно проксирование через IIS, Apache, Nginx. Подобный метод имеет ряд преимуществ по сравнению с обычным запуском приложения на Kestrel в виде самохостирующегося процесса. В частности, прокси-серверы позволяет скрыть приложения, если они не должны быть доступны напрямую. Кроме того, веб-серверы позволяет управлять нагрузкой ко всем приложениям, и предоставляют другие функции по управлению приложениями.
Собственно при создании проекта ASP.NET Core в Visual Studio такой способ используется по умолчанию.
HTTP.sys
Итак, изменим файл Program.cs, чтобы в нем использовался не Kestrel, а HttpSys:
Если метод UseKestrel() задает в качестве сервера Kestrel, то вызов метода UseHttpSys() аналогичным образом устанавливает в качестве сервера HTTP.sys.
Теперь запустим приложение, выбрав профиль, который совпадает с названием проекта:
И у нас запустится та же самая консоль, что и при работе через Kestrel, только теперь все вызовы к приложению будут идти через WebListener.
Сайт на ASP.NET для начинающих — первые шаги
Авторизуйтесь
Сайт на ASP.NET для начинающих — первые шаги
ASP.NET — платформа от Microsoft для создания и развёртывания сайтов, веб-приложений и сервисов. По данным SimilarTech, около 2 000 000 сайтов используют эту платформу. В этой статье описаны первые шаги создания сайта на ASP.NET.
Для разработки будем использовать Visual Studio.
Создание ASP.NET проекта
Откройте Visual Studio Installer и нажмите «Изменить» на нужной среде разработки. Перед вами откроется список всех нагрузок. В категории Веб-разработка и облако нужно включить ASP.NET и разработка веб-приложений. После этого нажмите на кнопку Изменить в нижнем правом углу и дождитесь установки нагрузки.

Перейдите в Visual Studio и создайте новый проект, выбрав тип Веб-приложение ASP.NET (.NET Framework). Потом нужно выбрать необходимую модель приложения:
Выберете модель Веб-формы и завершите создание проекта.
Внутренняя структура проекта
В проекте сайта уже загружены некоторые библиотеки, необходимые для комфортного старта: CSS-фреймворк Bootstrap, JS-фреймворк jQuery, MSAjax и некоторые другие.
После создания тут уже присутствуют 3 страницы: Default, About и Contact. Каждая страница состоит из 3 файлов:
Вот так выглядит About.aspx:
3–4 декабря, Онлайн, Беcплатно
Чтобы проверить и запустить проект, нажмите IIS Express или же традиционную клавишу F5. После этого все файлы скомпилируются и сайт откроется по адресу http://localhost:4400 в браузере по умолчанию. Номер порта может отличаться.

Так выглядит страница About
Создание веб-формы
Чтобы создать новую страницу, в контекстном меню проекта выберите Добавить→Веб-форма. После этого автоматически сгенерируются и заполнятся все 3 файла.
Примечание Веб-формы можно создавать с помощью встроенного графического конструктора веб-форм. Что бы открыть его, в контекстном меню нужной веб-формы нажмите на Открыть в конструкторе. Все необходимые элементы можно достать из Панели Элементов (Вид→Панель элементов). Но если вам нужна максимальная гибкость и функциональность — лучше разрабатывать формы вручную в коде.
Потом можно добавить ссылку на новую страницу в панель навигации в Site.Master :
Примечание Обратите внимание, что в ссылке указывается название страницы без расширения.
Во всех упоминаниях нужно заменить News на название вашей страницы. Теперь форма будет отображаться вместе с общей вёрсткой.
Для интеграции значений в вёрстку из aspx.cs используют специальный тег :
Изучить все возможности веб-форм можно в официальной документации.
Движок представлений Razor
В Razor также можно выполнять неявные выражения прямо в HTML разметке:
Тут есть привычные для ЯП конструкции, которые могут значительно облегчить вёрстку. Вот некоторые из них:
ASP.NET
Supported on macOS, Windows, and Linux
Interactive web UI with C#
Web Apps
Build full stack web apps with HTML, CSS, JavaScript, and C#
Develop REST APIs for a range of clients, including browsers and mobile devices
Real-time
Enable bi-directional communication between server and client, in real-time
Microservices
Create independently deployable microservices that run on Docker containers
What is ASP.NET?
.NET is a developer platform made up of tools, programming languages, and libraries for building many different types of applications.
Learn ASP.NET
Learn about all ASP.NET has to offer with our tutorials, video courses, and docs.
Fast and scalable
ASP.NET performs faster than any popular web framework in the independent TechEmpower benchmarks.
Data sourced from official tests available at TechEmpower Round 20.
Build secure apps
ASP.NET supports industry standard authentication protocols. Built-in features help protect your apps against cross-site scripting (XSS) and cross-site request forgery (CSRF).
ASP.NET provides a built-in user database with support for multi-factor authentication and external authentication with Google, Twitter, and more.
Active community and open-source
Get quick answers to questions with an active community of developers on Stack Overflow, ASP.NET forums, and more.
NET is open source on GitHub, with over 100,000 contributions and 3,700 companies already contributing.
Free hosting on Azure
Get 10 ASP.NET websites for free with Microsoft Azure.
You can also deploy to any major cloud platform, your own Linux or Windows servers, or one of many hosting providers.








