Logo designed by Pablo Iglesias.
В статье рассмотрены паттерны и приемы авторизации в ASP.NET Core MVC. Подчеркну, что рассматривается только авторизация (проверка прав пользователя) а не аутентификация, поэтому в статье не будет использования ASP.NET Identity, протоколов аутентификации и т.п. Будет много примеров серверного кода, небольшой экскурс вглубь исходников Core MVC, и тестовый проект (ссылка в конце статьи). Приглашаю интересующихся под кат.
Содержание:
- Claims
- Подготовительные работы
- Атрибут Authorize и политики доступа
- Настройки политик доступа
- Resource-based авторизация
- Авторизация в Razor-разметке
- Permission-based авторизация. Свой фильтр авторизации
Читать дальше →
< ...
Первая версия ASP.NET MVC появилась еще в 2009 году а первый перезапуск платформы (ASP.NET Core) начал поставляться с прошлого лета. На протяжении этого времени структура проекта по умолчанию осталась почти неизменной: папки для контроллеров, представлений (views) и часто для моделей (или, возможно, ViewModels). Такой подход называется
Tech folders. После создания нового проекта ASP.NET Core MVC организационная структура папок имеет следующий вид:
В чем проблема со структурой папок по умолчанию?
Большие веб-приложения требуют лучшей организации чем маленькие. Когда есть большой проект, организационная структура папок, которую используется по умолчанию в ASP.NET MVC (и Core MVC), перестает работать на вас.
Читать дальше →
ASP.NET Core — новейший фреймворк для кроссплатформенной веб разработки. Пока его популярность (как ...
ASP.NET Core — новейший фреймворк для кроссплатформенной веб разработки. Пока его популярность (как и количество вакансий) только начинает набирать обороты самое время узнать о нем побольше. Ну а для того, чтобы все знания не испарились сразу после прочтения — добавим существенную практическую часть. Создадим простое приложение, для тестирования прочитанного.
Если вы считаете, что уже достаточно круты в новом фреймворке — можете попробовать пройти тест до того, как прочтете статью. Линк. Весь код проекта можно посмотреть на гитхабе.
Первая часть включает:
- Что такое .NET Core и ASP.NET Core?
- Основы создания приложения и его структура
- Добавление новых элементов, скаффолдинг
- Основы встроенного Dependency Injection
- Деплоймент в Azure
Читать дальше →
Зачастую программистам требуется передать в (из) GridView более одного параметра при обращении к базе данных MS SQL Server,
в этом примере показано как передать и получить три параметра из переменной сессии.
Т.е. пользователь на странице выбирает из GridView необходимую строку с данными, которая является гиперссылкой и перенаправляется на эту же страницу, но уже с выбранными тремя параметрами и таким образом получается что-то вроде перехода по "дереву" данных таблицы базы данных.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" BackColor="Azure"
HeaderStyle-BackColor="Red"
HeaderStyle-Font-Bold="True"
BorderColor="gray"
CellPadding="3"
CellSpacing="0"
Font-Size="8pt"
ForeColor="Black"
DataKeyNames="Razdel" DataSourceID="SqlDataSource3" Width="100%">
<AlternatingRowStyle BackColor="LightCyan" />
<Columns>
<asp:BoundField DataField="kod" HeaderText="Код" ItemStyle-ForeColor="Red" ItemStyle-Font-Bold = "True"
SortExpression="Razdel" />
<asp:HyperLinkField DataNavigateUrlFields="Razdel, Urov, kod"
DataNavigateUrlFormatString="~/index.aspx?Rz={0}&Ur={1}&kd={2}" DataTextField="Name1" ItemStyle-Font-Bold = "True"
HeaderText="Наименование" />
</Columns>
<EmptyDataTemplate>
<font color="Red"><B>Нет входжения.</B></font></BR></BR></BR>
<A href="~/index.aspx"><B>Переход в начало >>></B></A></BR></BR></BR>
<A href="javascript: history.back()"><B><<< Переход назад </B></A>
</EmptyDataTemplate>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource" runat="server"
DataSourceMode="DataSet"
connectionstring="<%$ ConnectionStrings:Conn %>"
SelectCommand="SELECT Razdel, Urov, Kod, Name1 FROM Table WHERE (Razdel = @Rz) AND (Urov = @Ur) AND (Kod=@Kd) ORDER BY Kod">
<SelectParameters>
<asp:SessionParameter SessionField="Rz" Name="Rz" Type="String" />
<asp:SessionParameter SessionField="Ur" Name="Ur" Type="String" />
<asp:SessionParameter SessionField="Kd" Name="Kd" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
Довольно часто вебмастерм необходимо в своей практике использовать перенаправление посетителей сайта с одной страницы на другую или даже с одного сайта на другой. Причин этому может быть достаточно много, так например, как известно, что обычно существуют на хостингах зеркала сайтом, имена которых отличаются приставкой www. Не будем вдаваться в подробности существования подобных «зеркал», но знайте, что это совершенно два разных сайта, которые имеют точную копию другого, поэтому пользователь набирая адрес сайта с www и без, попадают на один и тот же сайт, но они считаются разными сайтами. То же самое происходит и с роботами, которые обходят ваши сайты, они видят два разных сайта, хотя фактически это один. Теперь представьте, что другие вебмастера на своих сайтах делают ссылки на ваш сайт, что нам и хотелось бы как можно больше, с разными названиями вашего сайта, т.е с www или без. В результате ссылочная масса на ваш сайт разделялась бы на две части, что и делают поисковые роботы, а ваша позиция сайта в этом случае так же примерно в два раза ухудшилась, поскольку в настойках своего сайта вы указываете основное «зеркало» сайта как, например, без www. Обычно это указывается в файле robots.txt.
Так вот, чтобы избежать подобных проблем, необходимо использовать редирект с кодом 301, что сообщает поисковым роботом, что страница перенесена «навсегда» по новому адресу. Для сайтов на ASP.NET это можно сделать в конфигурационном файле web.config который расположен в корне вашего сайта. В нем необходимо вставить в секцию <system.webServer> следующий код, который перенаправляет посетителей и роботов с домена с www на домен без www/
<rewrite>
<rules>
<rule name="Redirect from WWW" stopProcessing="true">
<match url="^(.*)$" ignoreCase="false" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^www\.(.+)$" />
</conditions>
<action type="Redirect" url="http://{C:1}/{R:1}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
Или так:
<rewrite>
<rules>
<rule name="Redirect from WWW" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^www.myasp.ru$" />
</conditions>
<action type="Redirect" url="http://myasp.ru/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
Или так методом простого удаления www в запросе:
<rewrite>
<rules>
<rule name="Remove WWW" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{CACHE_URL}" pattern="*://www.*" />
</conditions>
<action type="Redirect" url="{C:1}://{C:2}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
Если вы хотите сделать редирект на другой сайт, тогда используйте такой код:
<rewrite>
<rules>
<rule name="Redirect" stopProcessing="true">
<match url=".*" />
<action type="Redirect" url= "http://myasp.ru" redirectType="Permanent" />
</rule>
</rules>
</rewrite>