Как работает asp net приложение
ADO . NET — набор классов, предназначенных для доступа к базам данных Microsoft SQL Server , к источникам данных OLEDB и к файлам XML .
Компьютерные языки бывают компилируемыми и интерпретируемыми. В процессе компиляции программы, написанной на компилируемом языке, создается выполняемый файл (в Windows — .exe). Он выполняется быстро, но не может исполняться на другой платформе. Машина, на которой она выполняется, должна иметь похожую конфигурацию. Например, если программа использует динамическую библиотеку DLL , то эта библиотека должна быть установлена и на целевой машине. Интерпретируемые программы компилируются в момент выполнения, поэтому они работают медленнее, но не зависят от конкретной машины. В . NET Framework применяется двухэтапная компиляция , то есть первый этап — это компиляция в MSIL , а вторая — компиляция " just-in-time " компилятором во время исполнения. JIT- компилятор оптимизирует код для той машины, на которой он исполняется. В ASP . NET страница компилируется в MSIL при первом обращении клиента к странице. Вместе с ней компилируются классы, которые она использует. Если вы применяете Visual Studio 2005 , можно не ожидать первого запроса, а принудительно скомпилировать все страницы вашего проекта. Это позволит выявить синтаксические и другие ошибки.
MSIL — это ассемблер , не зависящий от машины. Он может выполняться на любой машине, где установлена CLR . Проект Mono пытается перенести CLR на другие платформы, позволяя взаимодействовать серверам, работающим на разных платформах.
Когда мы инсталлируем . NET , в соответствующих директориях C :\ WINDOWS \Microsoft. NET \Framework\ помещается также файл aspnet_isapi. dll . Это — ISAPI-расширение, и предназначено оно для получения запросов, адресованных ASP . NET -приложениям (*.aspx *.asmx и т.д.), а также для создания рабочих процессов aspnet_wp.exe, обрабатывающих запросы. Интернет- сервер — IIS или встроенный в WebMatrix и в Visual Studio Cassini — используют это расширение, когда им надо обработать обращение к страницам с расширением aspx.
Основная задача объекта Page — посылка HTML -кода в выходной поток . Этот класс компилируется в библиотеку DLL , которая загружается в процесс web -сервера. Последующие запросы к странице также обрабатывает DLL , если исходный код страницы не меняется. Все эти файлы можно найти в директории " Temporary ASP . NET Files" текущей версии . NET . Если мы работаем в среде разработки Visual Studio 2005 или VWD, для каждого проекта создается своя поддиректория.
Типы страниц и папок проекта
В проект можно добавлять новые файлы через диалог New File.
Если снять отметку с флажка "Place code in separate file", Visual Studio создаст один файл , в котором будет и страница , и код для ее обработки (в стиле WebMatrix ).
Все файлы помещаются в директорию проекта. И наоборот, все файлы, которые будут помещены в директорию проекта, станут его частью. Для web -сайтов не существует специального файла .csproj, в котором перечислялись бы его составные части, как это было в предыдущих версиях Visual Studio. Структура решения (solution) описывается в текстовом файле .sln. В решение могут входить несколько web -сайтов и библиотек.
В ASP . NET 2.0 имеются специальные поддиректории проекта для разных типов файлов. Например, в папке App_Code хранятся общедоступные классы , текстовые файлы и некоторые другие (DataSet, диаграмма классов). Файлы с расширениями .cs или .vb, попавшие туда, автоматически компилируются, когда запрашивается любая страница проекта. В App_Data содержатся источники данных, используемых в проекте, — базы данных Access и Microsoft SQL , XML -файлы. К этой директории нельзя получить доступ извне, а только из самого приложения. В папке Themes хранятся темы проекта ( "Стили элементов управления. Темы и шкурки" ). Применение тем позволяет настроить единообразный внешний вид сайта и централизованно им управлять. В App_GlobalResources находятся ресурсы, например, таблицы строк, которые можно создавать на разных языках. Язык ресурсов выбирается автоматически в зависимости от настроек браузера пользователя. В папке App_WebReferences находятся ссылки на используемые web -сервисы.
Можно создавать собственные поддиректории проекта, например, для хранения картинок.
Если вы считаете, что уже достаточно круты в новом фреймворке — можете попробовать пройти тест до того, как прочтете статью. Линк. Весь код проекта можно посмотреть на гитхабе.
Первая часть включает:
- С открытым исходным кодом
- Кроссплатформенная
- Гибкая в установке — может быть внутри приложения и можно поставить несколько версий на одной и той же машине
- Все сценарии работы поддерживаются с помощью консольных инструментов
- Возможность намного лучше контролировать нужные модули, сборки. Например, нет жесткой привязки к IIS, System.Web.dll
- Встроенный функционал для внедрения зависимостей
- Открытый исходный код
Приступим к практической реализации
Чтобы облегчить себе жизнь, выберем Web Application и поменяем аутентификацию на Individual User Accounts. Таким образом Visual Studio уже сгенерирует весь нужный код для базового приложения.
Проверим классы 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. Конечно в ней еще не все идеально, поэтому нужно допилить некоторые моменты и сделать их более удобными.
После создания модели и простого функционала для работы с ней, можно перейти к самому процессу прохождения тестов. В общем, все выглядит просто. Сервер присылает вопрос, варианты, мы отсылаем назад ответ. Сервер сохраняет его. В конце теста показываем результат. Добавим код для этого поведения.
В общем, все что нужно для теста у нас есть.
Конфигурация контейнера осуществляется в методе ConfigureServices класса Startup. Пример:
Можно заметить, что для контекста базы данных и Identity фреймворка есть дополнительные, не типичные методы их регистрации. Это позволяет более гибко их сконфигурировать. В этот подход регистрации сервисов очень красиво вписываются extension-методы.
Деплой
Одним из самых простых способов деплоймента остается Microsoft Azure. Нам достаточно самых базовых настроек для полноценной работы. Развертывание сайта на сервере все так же просто — с помощью нескольких кликов, начиная с контекстного меню на файле проекта.
Выводы
Для разработки будем использовать Visual Studio.
Выберете модель Веб-формы и завершите создание проекта.
Внутренняя структура проекта
В проекте сайта уже загружены некоторые библиотеки, необходимые для комфортного старта: CSS-фреймворк Bootstrap, JS-фреймворк jQuery, MSAjax и некоторые другие.
После создания тут уже присутствуют 3 страницы: Default, About и Contact. Каждая страница состоит из 3 файлов:
- Page.aspx — содержит в себе HTML-разметку конкретной страницы;
- Page.aspx.cs — отвечает за логику работы конкретной страницы;
- Page.aspx.designer.cs — является мостом между Page.aspx и Page.aspx.cs.
Вот так выглядит About.aspx:
Как видно, этот файл содержит лишь контент конкретной страницы. Вся общая разметка находится в Site.Master и Site.Mobile.Master .
3–4 декабря, Онлайн, Беcплатно
Так выглядит страница About
Создание веб-формы
Чтобы создать новую страницу, в контекстном меню проекта выберите Добавить→Веб-форма. После этого автоматически сгенерируются и заполнятся все 3 файла.
Примечание Веб-формы можно создавать с помощью встроенного графического конструктора веб-форм. Что бы открыть его, в контекстном меню нужной веб-формы нажмите на Открыть в конструкторе. Все необходимые элементы можно достать из Панели Элементов (Вид→Панель элементов). Но если вам нужна максимальная гибкость и функциональность — лучше разрабатывать формы вручную в коде.
Потом можно добавить ссылку на новую страницу в панель навигации в Site.Master :
Примечание Обратите внимание, что в ссылке указывается название страницы без расширения.
Во всех упоминаниях нужно заменить News на название вашей страницы. Теперь форма будет отображаться вместе с общей вёрсткой.
Для интеграции значений в вёрстку из aspx.cs используют специальный тег <%: %> :
В этом случае SomeVar должен быть публичным полем. Если нужно выполнить какой-либо код для присвоения значения этой переменной, то выполнить его нужно в сгенерированном методе Page_Load .
Получение значений параметров из URL производится через статический класс Request , в котором хранятся и прочие данные о запросе:
Изучить все возможности веб-форм можно в официальной документации.
Движок представлений Razor
В Razor также можно выполнять неявные выражения прямо в HTML разметке:
Тут есть привычные для ЯП конструкции, которые могут значительно облегчить вёрстку. Вот некоторые из них:
Модели
Классы модели позволяют отображать данные в вашей базе данных. Класс модели обычно состоит из атрибутов вместе с их «получателями» и «установщиками». Атрибуты — это, по сути, данные, для которых должен иметь значение любой экземпляр этого класса модели.
Количество классов моделей и типов атрибутов в этих классах моделей зависит от требований вашего приложения. Например, приложение, которое управляет данными сотрудника может иметь класс модели Employeeс атрибутами name, department и rankпотому, что эти атрибуты применяются ко всем сотрудникам.
Контроллеры
В контроллерах также реализована инъекция зависимостей, которая устанавливает соединение между контроллерами и контекстом вашей базы данных. Это позволяет вам через use _contextвесь класс контроллера получить доступ к вашей базе данных без необходимости инициализировать какой-либо объект.
Методы внутри контроллера называются «методами действия», поскольку они возвращают «результат действия». Имя метода действия используется для сопоставления его конечной точки URL. Например, если имя контроллера — UserController, а имя метода действия — Details, то существует конечная точка URL-адреса, к /Users/Details/которой можно получить доступ, и которая запустит метод действия Details.
Фреймворк извлекает маршрут из имени контроллера. Например, если имя контроллера UsersController, ваш маршрут будет /Users. URL-адрес формы Controller1/Method1соответствует методу, указанному Method1в Controller1 class. Если имя метода класса Users SignUp(), то маршрут будет /Users/SignUp/. Метод действия по умолчанию, срабатывающий, когда пользователь обращается к URL-адресу контроллера, — Index(). Это выполняет поведение, заданное в Index.cshtmlфайле в папке представлений.
Взгляды
/Views/- это буква «V» в MVC. /Views/Папка содержит все файлы, которые будут использоваться для отображения пользовательского интерфейса к пользователю, что они могут взаимодействовать. По умолчанию в этой папке есть ещё две папки: /Home/и /Shared/. Оба Index.cshtmlи _Layout.cshtmlпапки в основном отвечают за ваш вывод.
Созданные представления соответствуют методам действий вашего контроллера. Например, у Index()метода есть вызываемое отображаемое представление, Index.cshtmlа у Create()метода есть вызываемое представление Create.cshtmlи так далее. Файлы в папке Views, которые используют методы или данные из моделей, должны иметь объявление модели в начале, которое позволяет вам получить доступ к атрибутам указанного класса модели.
В этом случае вы можете читать и извлекать данные и атрибуты из Userклассов. Самый простой запрос просмотра — это запрос атрибута. Это позволяет вам считывать значение атрибута из парного класса модели.
Вот пример Index.cshtmlфайла в представлениях, который отображает простой текст. Поскольку он не вызывает никаких методов и не использует какие-либо данные модели, нам не нужно связывать модель в начале.
Характеристики
В /Properties/папке находится launchSettings.json файл. Этот файл сообщает платформе, как запустить это приложение.
/Startup.cs и /Program.cs
Читайте также: