асп нет что это
Путь ASP.NET Core [уровень 1] Основы
ASP.NET Core — новейший фреймворк для кроссплатформенной веб разработки. Пока его популярность (как и количество вакансий) только начинает набирать обороты самое время узнать о нем побольше. Ну а для того, чтобы все знания не испарились сразу после прочтения — добавим существенную практическую часть. Создадим простое приложение, для тестирования прочитанного.
Если вы считаете, что уже достаточно круты в новом фреймворке — можете попробовать пройти тест до того, как прочтете статью. Линк. Весь код проекта можно посмотреть на гитхабе.
Первая часть включает:
В чем же тогда особенности и отличия ASP.NET Core от предыдущего ASP.NET? Некоторые из них это:
Класс Statup можно, в какой-то степени, охарактеризовать как новый вариант Global.asax (Это класс для глобальной настройки всего приложения в предыдущей версии ASP.NET). Грубо говоря, можно сказать, что метод ConfigureServices нужен для конфигурации контейнера для внедрения зависимостей и его сервисов, а метод Configure для конфигурации конвейера обработки запросов.
Приступим к практической реализации
Чтобы облегчить себе жизнь, выберем Web Application и поменяем аутентификацию на Individual User Accounts. Таким образом Visual Studio уже сгенерирует весь нужный код для базового приложения.
Рассмотрим детальней что же нового появилось в ASP.NET Core. С точки зрения разработки вся концепция осталась прежней. Структура проекта базируется на паттерне MVC. Для работы с данными по умолчанию используем Entity Framework, логика описана в классах-контроллерах, на уровне представлений используем синтаксис cshtml + новая фишка tag helpers.
Проверим классы Program.cs и Startup.cs, они действительно выглядят такими же, как было описано выше. Конечно класс Startup не совсем пуст, а уже вмещает функционал для считывания конфигурации, настройки базового логирования, маршрутизации и привязку на нашу модель базы данных.
Дополним модель базы данных сущностями для создания и прохождения тестов. Будем использовать следующие сущности: Набор тестовых вопросов — TestPackage, Сам вопрос (тест) — TestItem, Результат теста — TestResult. Пример можно посмотреть тут. Радует, что EntityFramework Core уже поддерживает большинство функционала и можно полноценно пользоваться Code First миграциями.
Добавляем логику
Теперь, когда у нас есть модель базы данных, мы можем приступить к созданию логики для нашего приложения. Самый простой способ создания админки — это механизм scaffolding. Для этого, кликаем правой кнопкой мыши по папке контроллеров и выбираем Add → New Scaffold Item:
Выбираем «MVC Controller с представлениями, с использованием Entity Framework». Этот шаблон позволяет нам быстро создать контроллер и вьюхи для управления одной конкретной моделью. Проделаем такой трюк для TestPackage и TestItem. В результате у нас есть готовый прототип админки для нашей системы. Можно запустить проект и зайти на страницы этих контроллеров, просто добавить его имя без слова Controller в конец адреса, например, /testpackages. Конечно в ней еще не все идеально, поэтому нужно допилить некоторые моменты и сделать их более удобными.
После создания модели и простого функционала для работы с ней, можно перейти к самому процессу прохождения тестов. В общем, все выглядит просто. Сервер присылает вопрос, варианты, мы отсылаем назад ответ. Сервер сохраняет его. В конце теста показываем результат. Добавим код для этого поведения.
В общем, все что нужно для теста у нас есть.
Основы Dependency Injection в ASP.NET Core
Важным новшеством новой версии ASP.NET так же является встроенный механизм внедрения зависимостей. В 2016 году уже никого не удивишь тем, что механизм внедрения зависимостей можно перенести внутрь фреймворка. Мало какое серьёзное приложение пишут без использование этого подхода. DI в ASP.NET Core реализован достаточно базово, но в то же время позволяет решить большинство задач управления зависимостями.
Конфигурация контейнера осуществляется в методе ConfigureServices класса Startup. Пример:
Можно заметить, что для контекста базы данных и Identity фреймворка есть дополнительные, не типичные методы их регистрации. Это позволяет более гибко их сконфигурировать. В этот подход регистрации сервисов очень красиво вписываются extension-методы.
После регистрации сервисов, самый легкий способ получить из в коде (например, в контроллерах) — это просто добавить параметр конструктора типа, который был зарегистрирован. Такие контроллеры по умолчанию создаются скаффолдингом.
Деплой
Одним из самых простых способов деплоймента остается Microsoft Azure. Нам достаточно самых базовых настроек для полноценной работы. Развертывание сайта на сервере все так же просто — с помощью нескольких кликов, начиная с контекстного меню на файле проекта.
Выводы
ASP.NET
Supported on Windows, Linux, and macOS
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.
Сайт на 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:
8 декабря в 18:00, Онлайн, Беcплатно
Чтобы проверить и запустить проект, нажмите IIS Express или же традиционную клавишу F5. После этого все файлы скомпилируются и сайт откроется по адресу http://localhost:4400 в браузере по умолчанию. Номер порта может отличаться.
Так выглядит страница About
Создание веб-формы
Чтобы создать новую страницу, в контекстном меню проекта выберите Добавить→Веб-форма. После этого автоматически сгенерируются и заполнятся все 3 файла.
Примечание Веб-формы можно создавать с помощью встроенного графического конструктора веб-форм. Что бы открыть его, в контекстном меню нужной веб-формы нажмите на Открыть в конструкторе. Все необходимые элементы можно достать из Панели Элементов (Вид→Панель элементов). Но если вам нужна максимальная гибкость и функциональность — лучше разрабатывать формы вручную в коде.
Потом можно добавить ссылку на новую страницу в панель навигации в Site.Master :
Примечание Обратите внимание, что в ссылке указывается название страницы без расширения.
Во всех упоминаниях нужно заменить News на название вашей страницы. Теперь форма будет отображаться вместе с общей вёрсткой.
Для интеграции значений в вёрстку из aspx.cs используют специальный тег :
Изучить все возможности веб-форм можно в официальной документации.
Движок представлений Razor
В Razor также можно выполнять неявные выражения прямо в HTML разметке:
Тут есть привычные для ЯП конструкции, которые могут значительно облегчить вёрстку. Вот некоторые из них:
Лекция 2. Анатомия ASP.NET. ASP.NET в действии.
Введение
ADO.NET – набор классов, предназначенных для доступа к базам данных Microsoft SQL Server, к источникам данных OLEDB и к файлам XML.
Разные части вашего проекта могут быть написаны на разных языках, это называется interoperability. Мы попробуем написать проект, где одна из страниц будет на Visual Basic, а другая на С#.
MSIL – это ассемблер, не зависящий от машины. Он может выполняться на любой машине, где установлена CLR. Проект Mono пытается перенести CLR на другие платформы, позволяя взаимодействовать серверам, работающим на разных платформах.
Вы можете ознакомиться с проектом на сайте http://mono-project.com
На странице http://go-mono.com/archive/xsp-0.10.html находится XSP — сервер ASP.NET, который может служить расширением сервера Apache – основного сервера *nix – систем.
Как работает ASP.NET
Этот модуль разбирает(parse) содержимое страниц aspx вместе с файлом отделенного кода и генерирует класс на языке страницы с объектом Page. Страница aspx отличается от обычной HTML-страницы наличием серверных элементов управления, которые описываются специальными тегами. Для понимания работы ASP.NET важно отметить, что каждому тегу элемента управления соответствует свой член класса страницы. Например,
Типы страниц и папок проекта
В проект можно добавлять новые файлы через диалог New File. Если снять отметку с флажка “Place code in separate file”, Visual Studio создаст один файл, в котором будет и страница, и код для ее обработки(в стиле WebMatrix).
Можно создавать собственные поддиректории проекта, например, для хранения картинок.
Проект на 2 языках
Готовые скомпилированные сборки сторонних производителей тоже можно использовать в проекте. Их помещают в папку Bin. При этом их необходимо импортировать в проект.
Создайте новый проект. Добавьте в него файл, выбрав тип файла Class и язык Visual Basic. Среда сама предложит поместить его в папку Code. Назовем его CustomClass. У него будет очень простой код. Всего одна функция, которая добавляет слово Hello к имени, переданному в качестве параметра.
Добавьте в проект страницу CodeFolder_cs.aspx. Это страница написана на C#, но она создает класс, написанный на VB.NET.
На странице определена форма, напоминающая форму Windows-приложения. На ней имеется кнопка, нажатие на которую обрабатывается в функции Button1_Click. В ней создается класс и вызывается его функция GetMessage с параметром, который берется из элемента редактирования. Возвращаемое значение записывается в элемент Label1. В более простом варианте это выглядит так:
Класс может быть написан на C#, а использоваться из страницы на Visual Basic.
Однако поместить в директории App_Code можно только на одном языке. Если там будет находиться файлы на разных языках, проект не будет компилироваться. Для того, чтобы использовать два языка, необходимо создать поддиректорию, добавить ее в файле web.config и поместить в нее файлы на другом языке.
Регистрация в файле web.config:
Директивы
На каждой странице aspx обычно задаются директивы, с помощью которых Вы можете контролировать поведение страницы. Можно считать их языком, с которым вы общаетесь с компилятором, указывая ему, как обрабатывать данную страницу. Директивы обычно помещают в начале файла. Мы уже встречались с директивой Page в первой лекции.
Синтаскис объявления директив такой:
Можно объявить несколько директив одновременно:
В ASP.NET 2.0 существует 11 директив.
Директива Атрибуты Описание
@Assembly Name
Src Импортирует на страницу или в элемент управления сборку с заданным именем
@Control такие же, как у Page Применяется для задания свойств при создании собственных пользовательских элементов управления.
@Implements Interface Указывает, что класс данной страницы реализует данный интерфейс
@Import Namespace Импортирует пространство имен
@Master такие же, как у Page Применяется на страницах шаблона дизайна(Master page). Новая в ASP.NET 2.0
@MasterType TypeName
VirtualPath Дает строго типизированную ссылку на класс, содержащийся в шаблоне дизайна. Позволяет обращаться к свойствам этого класса.
@OutputCache Duration
Location
VaryByCustom
VaryByHeader
VaryByParam
VaryByControl Управляет кэшированием страницы или элемента управления. Подробнее описана в лекции 15.
@Page см. Ниже Атрибуты, относящиеся к данной странице. Употребляется только в файлах с расширением aspx
@PreviousPageType TypeName
VirtualPath Страница, с которой были отправлены данные, введенные пользователем. Новая в ASP.NET 2.0. Раньше страницы отправляли пост только самим себе.
@Reference Page
Control Страница или элемент управления, который нужно компилировать вместе с данной
@Register Assembly
Namespace
Src
TagName
TagPrefix Создает псевдонимы для пространств имен и пользовательских элементов управления
Пока что подробно рассмотрим 2 из них – Page и Import.
Директива Page
Директива Page позволяет установить свойства страницы, которые будут использованы во время компиляции. Эта директива используется чаще остальных, поэтому ее необходимо рассмотреть более подробно.
Наиболее важные атрибуты директивы перечислены в таблице:
AutoEventWireup | Автоматическая обработка событий страницы |
Buffer | Управляет буферизацией страницы. По умолчанию буферизуется |
ClassName | Позволяет назначать имя класса, сгенерированного данной страницей |
CodeFile | Название файла с отделенным кодом для данной страницы |
Culture | Устанавливает набор региональных параметров, т.е. язык, формат валюты, даты, чисел |
Debug | Если true, на страницу выводится отладочная информация |
Trace | Вывод трассировочной информации |
EnableViewState | Сохранение состояния страницы. По умолчанию она сохраняется |
EnableTheming | Позволяет включить или выключить поддержку тем оформления. По умолчанию включено |
Inherits | Класс, от которого наследуется класс данной страницы в технологии отделенного кода |
IsAsync | Показывает, обрабатывается ли страница асинхронно. |
Language | Язык, используемый во внедренном коде |
WarningLevel | Наибольший допустимый уровень предупреждений компилятора |
CompilerOptions | Опции компилятора |
Пространства имен библиотеки классов
Библиотека классов FCL содержит тысячи классов. Для удобства использования они объединены в пространства имен. Чтобы обращаться к классам, объявленным в пространстве имен, без указания полного пути, его нужно импортировать в проект. Если вы хотите работать с файлами формата XML, вам нужно импортировать пространство имен System.XML. В страницах отделенного кода на C#, как всегда, используется директива using.
На странице aspx – директива Import
Для каждого пространства имен требуется отдельная директива Import.
Visual Studio.NET и VWD по умолчанию включают в страницу на C# наиболее часто используемые пространства имен. На страницу aspx импортировать эти пространства имен не требуется.
Например, в пространстве имен System.Web.UI находится класс Page, без которого не может существовать ни одна страница ASP.NET, в System.Web — HttpRequest и HttpResponse.
Программа просмотра классов
Все имеющиеся пространства имен показаны как узлы древовидной структуры. Нас интересует System.Web. Раскройте этот узел. Внутри оказались другие пространства имен. Раскройте System.Web.UI. Там находится большое количество классов, интерфейсов, делегатов, перечислений. Их можно узнать по иконкам. Например, иконка делегата похожа на чемодан.
Выберите класс Page. В окошке справа появится список его методов, полей и событий. Если выбрать метод, в третьем окне под вторым появится его описание. Внутри класса находятся еще две папки – классов-прародителей(Base Classes) и классов-потомков. Все их тоже можно просмотреть. Object Browser показывает и классы текущего проекта. Если классы закомментирован тегами генерации документации XML, то эта информация тоже видна, например Summary, Parameters, Values, Returns.
Исследуя свойство IsPostBack, можно узнать, что оно имеет булевское значение, и предназначено только для чтения.
Проверка соответствия стандартам
Существуют разные стандарты HTML и XHTML. Более поздние стандарты предъявляют более строгие требования, например, XHTML 1.1 не разрешает пользоваться
и другими простыми тегами без закрывающего слэша
. В то же время старые стандарты не поддерживают новые теги.
В заголовке HTTP-запроса указывается стандарт документа, Visual Studio 2005 во всех страницах указывает следующий стандарт:
Этот стандарт требует наличия атрибута xmlns в теге — ссылки на сайт с описанием стандарта.
Многие страницы, сделанные для предыдущих версий ASP.NET, не имеют такого атрибута. В панели инстументов Html Source Editing также находится выпадающий список, в котором можно выбрать стандарт или версию браузер, для которого предназначена данная страница. Страница автоматически проверяется на соответствие этому стандарту.
Свойства страницы
Страница – это основа всего в Web-приложении.
Класс System.Web.UI.Page инкапсулирует функциональность, необходимую для создания и обработки страниц ASP.NET.
Каждая страница ASP.NET – это объект класса, который автоматически генерируется ядром ASP.NET. Класс наследуется от ассоциированного со страницей класса, если мы используем отделенный код, или прямо наследуется от System.Web.UI.Page, если код на C# встроен в страницу. Среда также создает конструктор по умолчанию.
Чтобы убедиться в этом, можем создать страницу “PageType.aspx”:
Тип данной страницы ASP.pagetype_aspx
Базовый тип данной страницы System.Web.UI.Page
Такая же страница, созданная по технологии разделения кода.
Тип данной страницы ASP.pagetype_aspx
Базовый тип данной страницы PageType
То, что PageType – наследник System.Web.UI.Page, прописано в файле отделенного кода:
К текущему объекту страницы можно обращаться как к переменной Page. Page – это контейнер элементов управления данной страницы, поэтому содержит в себе коллекцию Controls. Если в теге присутствует атрибут runat = “server”, то в Page содержится и поле Header, через которое можно управлять заголовком страницы. Например, поменять название странице в заголовке браузера, назначить файл каскадных таблиц стилей.
В этом примере мы поменяли текст заголовка. Запустите эту страницу. В получившемся HTML-коде внутри тега стоит уже не «Untitled Page», а «Новый заголовок», который был установлен через Page.Header.Title. Был создан стиль для тега
, что отразилось таким образом:
Внешняя страница CSS была импортирована из файла.
Если атрибут AutoEventWireup, который присутствует в заголовке страниц, генерируемых VS, установлен, то методы с префиксом Page_ автоматической назначаются обработчиками событий страницы.
У страницы есть два важных свойства — Response и Request. Свойство Response имеет тип HttpResponse. Response страницы можно воспринимать как выходной поток. Весь HTML код генерируемой страницы в принципе может быть выведен через запись в этот поток. Это был обычный способ работы разработчиков asp. Но в ASP.NET есть более удобные средства вывода данных с помощью серверных элементов управления. Response лучше использовать для записи Cookies, для задания различных параметров заголовка – управлять кэшированием, свойством Expires.
Вот пример из MSDN:
Можно поменять кодовую страницу.
Функция Response.Redirect перенаправляет браузер на другую страницу.
Здесь формируется командная строка с параметрами QueryString, которые целевая страница может прочитать.
Аналогично свойство Request – это запрос, переданный на сервер для вывода нужной страницы. Он имеет тип HttpRequest. В нем хранится все о клиенте, включая настройки его браузера, файлы-cookie и данные, введенные им в форму.
События страницы
Работа среды ASP.NET со страницей начинается с получения и обработки Web-сервером IIS запроса к данной странице и передачи этого запроса среде выполнения ASP.NET. Среда выполнения анализирует, нужно ли компилировать страницу или можно выдать в качестве ответа страницу из кэша.
Затем начинается жизненный цикл страницы. Он начинается с этапа PreInit. После получения запроса среда выполнения загружает класс вызываемой страницы, устанавливает свойства класса страницы, выстраивает дерево элементов, заполняет свойства Request и Response и свойства UICulture и вызывает метод IHttpHandler.ProcessRequest. После этого среда выполнения проверяет, каким образом была вызвана эта страница, и если страница вызвана путем передачи данных с другой страницы, о чем будет рассказано далее, то среда выполнения устанавливает свойство PreviousPage.
На этом этапе устанавливается также свойство IsPostback объекта Page, которое позволяет узнать, в первый ли раз загружается форма или она должна формироваться как результат обработки данных, введенных пользователем.
В обработчиках событий страницы можно проверить это свойство:
Дальше происходит инициализация страницы – событие Init. Во времени инициализации страницы создаются дочерние пользовательские элементы управления и им установливаются свойства id. В это же время к странице применяются темы оформления. Если страница вызвана в результате постбэка, то на этом этапе данные, отправленные на сервер, еще не загружены в свойства элементов управления. Программист может инициализировать их свойства.
Загрузка. Во время события Load устанавливаются свойства элементов управления на основании информации о состоянии, если страница создается в результате отправки данных формы.
Если на странице существуют валидаторы(классы проверки данных, см. лекцию 5), то для них вызывается метод Validate(). Затем вызываются обработчики событий (при условии, что страница генерируется в ответ на действия пользователя).
В методе Render генерируется сам HTML-код выводимой страницы. При этом страница вызывает соответствующие методы дочерних элементов, те – методы своих дочерних элементов. В методе Render код выводится в Response.OutputStream. Сама страница тоже считается элементом управления – класс Page является наследником класса Control. Если на странице есть блоки отображения, они становятся частью функции отрисовки (rendering).
Наконец, страница выгружается из памяти сервера и происходит событие Unload.
Во время жизненного цикла страницы происходят различные события. Можно включить трассировку страницы, чтобы посмотреть порядок из возникновения.
Во время трассировки не выводится событие Unload, потому что оно происходит, когда весь код уже выведен. Во время обработки этого события нужно освободить ресурсы, например соединения с базами данных или открытые файлы.
Полный список событий страницы, которые можно переопределить в классе страницы:
* PreInit
* Init
* InitComplete
* PreLoad
* Load
* LoadComplete
* PreRender
* PreRenderComplete
* Unload
Для всех событий определены обработчики – виртуальные функции OnInit, OnLoad. Когда AutoEventWireup равно true, в классе автоматически объявляются функции-обработчики событий с префиксом Page — Page_Load, Page_Init и так далее. Одно из самых популярных событий – это Page_Load. Создавая новую страницу, Visual Studio создает обработчик этого события. Здесь можно изменить внешний вид элементов и создать новые. Можно установить AutoEventWireup в false. В таком случае надо писать перегруженные версии виртуальных функций.
Так можно добиться ускорения работы страницы.
Способы внедрения кода ASP.NET в страницу.
Есть три способа внедрить код на программном языке в страницу aspx.