asp.net — вопросы с ответами

ASP.NET – это платформа для веб-разработки Microsoft. Является составной частью платформы .NET. Сам же ASP.NET используется для создания одностраничных, динамических, корпоративных приложений, приложений для онлайн-банкинга и т. д.

В состав этой платформы входят дополнительные сервисы, модели программирования, инфраструктура и пр. Кроме того, сам ASP.NET состоит из трех фреймворков:

  • NET Web Pages;
  • Net Web Forms;
  • NET MVC.

Согласно заявлениям Microsoft, использование какого-либо из этих фреймворков приведет к одному и тому же результату. Но каждый из них имеет свои плюсы и минусы, что и стало причиной для разделения.

Web Pages

w3school, один из самых известных в мире веб-сайтов для изучения любых веб-технологий, построен на основе фреймворков ASP.NET Web Pages. На веб-страницах код на стороне клиента и код на стороне сервера размещаются на одной странице. Он похож на PHP и теперь называется классическим (старым) ASP. Если вы хотите создать приложение, которое является чем-то динамическим или частично динамическим, то вам могут понадобится технологии Web Pages.

Web pages предпочтительнее для создания информационных сайтов и блоговых приложений. Приложения, которые вы видите в Интернете с расширением .asp, построены на основе фреймворка Web pages.

Web Forms

Раньше, во времена MS-DOS, для создания, чтения, обновления и удаления файлов использовались различные команды. Но затем Microsoft выпустила Windows, в которой все стало графическим, так что теперь мы можем выполнять все эти действия через графический интерфейс. Поскольку Microsoft добилась многого в создании GUI, она решила повторить свой успех, но теперь уже в мире программирования. К примеру, кнопка или сетка, с помощью которых мы пишем код, должны выглядеть как кнопка или сетка. Но в Visual Studio (еще одна разработка Microfost) каждый язык программирования заменяется языком программирования Visual.

Если у вас уже имеется опыт работы в C++, то вы сможете работать и с Visual C++, в который уже интегрированы все элементы управления, такие как кнопки и меню. Вам просто нужно будет перетащить элементы управления и назначить их функцию.

То же самое Microsoft делает и в Web Forms, чтобы отделить клиентскую и серверную стороны. История вновь повторяется, и благодаря этой возможности Microsoft становится очень популярной уже среди разработчиков. Теперь мы можем спроектировать клиентскую часть на клиентском уровне и написать соответствующий код. Это более простой способ программирования, по сравнению с классическим подходом к разработке веб-страниц. Теперь разработка становится настолько быстрой, что мы уже создаем приложения на основе событий. Такой процесс называется быстрой разработкой RAD (Rapid Application Development).

Файлы Web Forms

На самом деле, веб-форма – это файл, основанный на том, как Payoneer построен на основе ASP.Net Web Form. Когда мы открываем любую Web Forms-страницу в окне браузера, выполняется расширение веб-формы .aspx (на бэкэнде полный файл будет выглядеть как .aspx.cs). Таким образом, при нажатии на какую-либо страницу Web Forms, запускается конечный файл (.aspx + .aspx.cs). И поэтому такие страницы называют «на основе файлов» (file based).

Каждая технология имеет свои плюсы и минусы. И конкретно эта является не лучшим вариантом для приложений уровня Enterprise. Так какие же проблемы есть у Web Forms?

Интернет на самом деле основан на действиях. Мы отправляем запрос серверу, а он отправляет нам ответ. Но Web Forms следуют архитектуре View First. Сначала мы запускаем событие при просмотре, затем выполняется полный жизненный цикл страницы, включая Page_Load, а затем выполняется действие. Теперь, если мы снова инициируем другое событие на той же странице, снова будет выполнен полный жизненный цикл страницы, а затем будет выполнен фактический метод. Это явно не самая продуманная механика.

Web Forms не поддерживают Reusability. В Web Forms есть две страницы, которые примерно одинаковы, и нам нужно снова и снова кодировать каждый элемент управления, независимо от того, есть ли у нас 2 страницы или 2+. Кроме того, в Web Forms нет слоев. Если мы хотим повторно использовать код, нам нужно понять концепцию слоев и создать многоуровневую архитектуру.

Есть еще одна смежная проблема, вытекающая их предыдущей. Предположим, что мы работаем над приложением Web Forms: одновременно 2 разных разработчика не могут работать на стороне клиента .aspx и на стороне сервера .aspx.cs. Только один разработчик может выполнять свои обязанности на какой-либо стороне. Несколько разработчиков смогут выполнять программирование одновременно только при наличии еще одного слоя.

Модульное тестирование

Очень сложно протестировать код в Web Forms, потому что есть множество функций, которые выполняются за одним событием. Поэтому будет довольно сложно найти проблемное место в коде. Однако в MVC мы можем добавить отдельный проект для проведения модульного тестирования. Он также может выполнять чистое модульное тестирование без каких-либо изменений в реальном коде приложения.

MVC

MVC создан для решения всех вышеперечисленных проблем.

  • Он является шедевр многоуровневого архитектурного подхода. По умолчанию он многослоен, а значит 2 или более разработчиков могут работать на разных слоях одновременно;
  • MVC основан на действиях;
  • Запрос направляется прямо к действию, и никаких дополнительных процессов в течение жизненного цикла не происходит;
  • Имеется возможность добавления проекта модульного тестирования, чтобы решить возможные проблемы с кодом;
  • Имеет динамический тип ответа. Нам нужно установить возвращаемый тип действия так же, как ActionResult. После чего мы сможем возвращать и просматривать что угодно, будь то файл или JSON;

Важно: необходимо помнить, что есть два термина MVC и ASP.Net MVC. Сам MVC – это шаблон дизайна. ASP.Net MVC – это библиотека. ASP.Net сам по себе является фреймворком.

  • M (модель): бизнес-уровень (данные)
  • V (Просмотр): Уровень представления (генерирует выходной интерфейс)
  • C (контроллер): обрабатывает пользовательский ввод (логика)

Мы можем заменить один слой любым другим методом. Вся эта многоуровневая архитектура – фактически красота SOC (Разделение ответственности), в которой каждая логика является различным местом относительно его ответственности. SOC описывает каждый слой, как отвечающий сам за себя.

Сервисы

Веб-сервисы – действительно горячая любимая тема в наши дни. Возможно, вы уже слышали о Web Services, WCF Services и Web API. Цель веб-службы – принять запрос от клиента и отправить его на сервер, а затем получить ответ от клиента. С помощью веб-служб мы отправляем запрос с разных устройств, и запрос отправляется на веб-сервер, а затем данные возвращаются. Веб-API также является примером веб-службы, но веб-служба – это просто общий термин, а веб-API – это нечто особенное в веб-службах.

Приложения и настройка

Как и ASP, ASP.NET инкапсулирует свои объекты в веб-приложении. Веб-приложение – это абстрактный термин для всех ресурсов, доступных в пределах виртуального каталога IIS. Например, веб-приложение может состоять из одной или нескольких страниц ASP.NET, сборок, файлов конфигурации веб-служб, графики и др. В этом разделе мы рассмотрим два основных компонента веб-приложения, а именно файлы глобальных приложений (Global.asax) и файлы конфигурации (Web.config).

Global.asax

Global.asax – это файл, используемый для объявления событий и объектов уровня приложения. Global.asax является расширением ASP.NET файла ASP Global.asa. Код для обработки событий приложения (таких как начало и конец приложения) находится в Global.asax. Такой код события не может находиться на странице ASP.NET или в самом коде веб-службы, поскольку во время запуска или завершения приложения его код еще не был загружен (или выгружен). Global.asax также используется для объявления данных, которые доступны для разных запросов приложений или для разных сеансов браузера. Этот процесс известен как управление состояниями приложений и сеансов.

Файл Global.asax стандартно находится в виртуальном корне IIS. Помните, что виртуальный корень может рассматриваться как контейнер веб-приложения. События и состояние, указанные в глобальном файле, затем применяются ко всем ресурсам, размещенным в веб-приложении. Если, например, Global.asax определяет переменную приложения состояния, все файлы .aspx в виртуальном корне будут иметь доступ к переменной.

Как и страница ASP.NET, файл Global.asax компилируется по прибытии первого запроса для любого ресурса в приложении. Сходство сохраняется, когда вносятся изменения в файл Global.asax; ASP.NET автоматически замечает изменения, перекомпилирует файл и направляет все новые запросы в новейшую компиляцию. Файл Global.asax создается автоматически при создании нового проекта веб-приложения в VS.NET IDE.

Директивы по применению

Директивы приложения находятся в верхней части файла Global.asax и предоставляют информацию, используемую для компиляции глобального файла. Определены три директивы приложения, а именно: Приложение, Сборка и Импорт. Каждая директива применяется со следующим синтаксисом:

<%@ appDirective appAttribute=Value ...%>

Web.config

Внутри ASP настройки приложения (например, состояние сеанса) хранятся в метабазе IIS. У этой схемы есть два основных недостатка. Во-первых, настройки хранятся не в удобочитаемом виде, а в собственном двоичном формате. Во-вторых, параметры нелегко переносятся с одного хост-компьютера на другой (трудно перенести информацию из метабазы ​​IIS или реестра Windows на другой компьютер).

Web.config решает обе вышеупомянутые проблемы, сохраняя информацию о конфигурации в виде XML. В отличие от записей реестра или метабазы, документы XML удобочитаемы и могут быть изменены любым текстовым редактором. Во-вторых, XML-файлы гораздо более переносимы, включая простую передачу файлов на коммутатор.

В отличие от Global.asax, Web.config может находиться в любом каталоге, который может быть или не быть виртуальным корнем. Параметры Web.config затем применяются ко всем ресурсам, доступным в этом каталоге, а также к его подкаталогам. Одним из следствий этого является то, что экземпляр IIS может иметь много файлов web.config. Атрибуты применяются иерархически. Другими словами, используется файл web.config в каталоге самого низкого уровня.

Поскольку Web.config основан на XML, он является расширяемым и гибким для широкого спектра приложений. Однако важно отметить, что файл Web.config является необязательным. Стандартный файл Web.config, используемый всеми ресурсами приложения ASP.NET, можно найти на локальном компьютере по адресу:

%winroot%Microsoft.NetFrameworkversionCONFIGmachine.config

38 ответов
Я пытаюсь запустить проект Asp.net MVC, полученный из источника управления TFS. Я добавил все ссылки на сборку, и я могу успешно строить и компилировать без каких-либо ошибок или предупреждений. Но я получаю следующую ошибку в браузере: Не удалось найти часть пути 'C:\B8akWorkspace\B8akProject\B8ak...
asp.net-mvc
roslyn
25 сен. 2015, в 10:47
7 ответов
Я пытаюсь установить заголовок Content-Type объекта HttpClient, как того требует API, который я вызываю. Я попытался установить Content-Type, как показано ниже: using (var httpClient = new HttpClient()) { httpClient.BaseAddress = new Uri("http://example.com/"); httpClient.DefaultRequestHeade...
rest
http
21 май 2012, в 05:22
16 ответов
Я использую элемент управления FileUploader в своем приложении. Я хочу сохранить файл в указанной папке. Теперь я хочу, если эта папка не существует, сначала ее создать, а затем сохранить файл в этой папке. Если папка уже существует, просто сохраните файл в ней. Как я могу это сделать?...
30 янв. 2012, в 14:14
15 ответов
Я использую Entity Framework 1 с .net 3.5. Я делаю что-то простое: var RoomDetails = context.Rooms.ToList(); foreach (var Room in Rooms) { Room.LastUpdated = DateTime.Now; } Я получаю эту ошибку, когда пытаюсь сделать: context.SaveChanges(); Я получаю сообщение об ошибке: Невозможн...
entity-framework
primary-key
28 сен. 2011, в 14:46
15 ответов
Я выполнил запрос Ajax на своем веб-сайте, и я вызываю конечную точку с веб-страницы. Он всегда возвращает 200 OK, но jQuery выполняет событие ошибки. Я пробовал много чего, но я не мог понять проблему. Я добавляю свой код ниже: Код jQuery var row = "1"; var json = "{'TwitterId':'" + row + "'}"; $...
31 май 2011, в 12:10
10 ответов
Я установил DotNetOpenAuth SDK-3.4.5.10201.vsix, и я не могу заставить его работать. Он работает локально (когда я запускаю как localhost), но когда я пытаюсь опубликовать его, он не работает. Сообщение об ошибке IIS, которое я получаю, это Краткое описание ошибки   Ошибка HTTP 500.22 - Внутренняя ...
iis
.net-4.0
iis-7.5
17 нояб. 2010, в 22:08
20 ответов
Как включить удаленные запросы в IIS Express? Скотт Гатри написал, что это возможно, но он не сказал, как это сделать.
iis-express
22 июль 2010, в 22:38
9 ответов
Обычно основное использование вопросительного знака - условное, x ? "yes" : "no". Но я видел другое использование для него, но не могу найти объяснения этого использования оператора ?, например. public int? myProperty { get; set; }
types
22 апр. 2010, в 14:14
22 ответа
У меня есть класс, который содержит свойство enum, и после сериализации объекта с помощью JavaScriptSerializer мой результат json содержит целочисленное значение перечисления, а не его string "name". Есть ли способ получить перечисление в виде string в моем json, не создавая собственный JavaScriptC...
serialization
enums
javascriptserializer
14 март 2010, в 05:32
16 ответов
У нас есть Request.UserHostAddress, чтобы получить IP-адрес в ASP.NET, но это, как правило, IP-адрес пользователя ISP, а не только IP-адрес пользователя, который, например, нажал ссылку. Как я могу получить реальный IP-адрес? Например, в профиле пользователя Qaru это: "Последняя активность учетной ...
client
ip-address
09 апр. 2009, в 18:00
12 ответов
Все мои годы в колледже я использовал public и хотел бы знать разницу между public, private и protected? И что делает static в отличие от ничего?
access-modifiers
05 март 2009, в 13:45
9 ответов
Может ли кто-нибудь помочь мне получить URL-адрес текущей рабочей страницы ASP.NET на С#?
27 фев. 2009, в 05:32
33 ответа
Path.Combine удобен, но есть ли аналогичная функция в платформе .NET для URL-адрес? Я ищу синтаксис вот так: Url.Combine("http://MyUrl.com/", "/Images/Image.jpg") который вернется: "http://MyUrl.com/Images/Image.jpg"
url
path
16 дек. 2008, в 20:08
16 ответов
Как десериализовать этот XML-документ: <?xml version="1.0" encoding="utf-8"?> <Cars> <Car> <StockNumber>1020</StockNumber> <Make>Nissan</Make> <Model>Sentra</Model> </Car> <Car> <StockNumber>1010</StockN...
serialization
xml-deserialization
12 дек. 2008, в 21:29
39 ответов
Я беру свою первую трещину в Ajax с помощью jQuery. Я получаю свои данные на своей странице, но у меня возникают некоторые проблемы с данными JSON, которые возвращаются для типов данных Date. В принципе, я получаю строку назад, которая выглядит так: /Date(1224043200000)/ От кого-то совершенно новог...
15 окт. 2008, в 20:34
Наверх
Меню