Записи с меткой «asp.net»

Настраиваем контекст бд и migration (entity framework)

Создадим контекст базы данных. Настроим логирование всех sql запросов в debug вывод. Настроим migration для обновления бд. Создадим класс — контекст базы данных c логированием sql запросов в debug using System; using System.Collections.Generic; using System.Data.Entity; using System.Diagnostics; using System.Linq; using System.Web; namespace WebApp.Databases { public cla ss DefaultDatabase : DbContext { public DefaultDatabase() : base(«DefaultConnection») …

Напишем привязчик к модели для удаления пробельных символов слева и справа и защиты от xss атак (asp.net mvc)

В asp.net mvc привязчик к модели сразу ругается и бросает исключение, если встречает html теги и html атрибуты в переданных строках. Но если указать атрибут AllowHtml, то привязчик по умолчанию, разрешает все html теги и html атрибуты. А это не безопасно, и злоумышленник может внедрить опасный код на сайт. Так же если передать строки с …

Логирование entity framework запросов

В прошлых заметках я описывал как поднять elmah и nlog логирования. Сейчас опишу как прикрутить это к entity framework. Реализуем интерфейс IDbCommandInterceptor: using WebApp.Mvc.Infrastructure; using NLog; using System; using System.Collections.Generic; using System.Data.Common; using System.Data.Entity.Infrastructure.Interception; using System.Linq; using System.Web; namespace WebApp.Infrastructure { public class NLogCommandInterceptor : IDbCommandInterceptor { private Logger _logger = LogManager.GetCurrentClassLogger(); private ElmahWrap _elmah = …

Компилируем razor файлы в одну dll (asp.net mvc)

Указываем значение «Embedded Resource» в свойстве «Build Action» у всех файлов разметки. Создадим и зарегистрируем собственный VirtualPathProvider: public class EmbeddedVirtualPathProvider : VirtualPathProvider { public EmbeddedVirtualPathProvider() { } public override bool FileExists(string virtualPath) { return IsEmbeddedResourcePath(virtualPath) || base.FileExists(virtualPath); } public override VirtualFile GetFile(string virtualPath) { if (IsEmbeddedResourcePath(virtualPath)) return new EmbeddedVirtualFile(virtualPath); else return base.GetFile(virtualPath); } public override …

Используем Ninject.Extensions.Conventions для автоматической регистрации сервисов (c#, ninject)

Как и любой di контейнер ninject предоставляет возможность делать автоматическую регистрацию объектов. Это полезно тем что может избавить от неинтересной работы и так же полезно начинающим программистам, которые незнакомые с внедрением зависимостей и как работать с di контейнером. Весь фокус автоматической регистрации заключается в том что при именовании интерфейсов и сервисов нужно соблюдать некие соглашения. …

Исключаем ненужные файлы из публикации asp.net-mvc приложения

Проделаем некоторые действия для того чтобы исключить из публикации ненужные файлы, в моем случае это были файлы .less и .map. Это файлы производные препроцессора css — lesscss. Создадим файл в корне приложения MyWebApplication.wpp.targets Откроем этот файл и добавим следующие строчки: <?xml version=»1.0″ encoding=»utf-8″?> <Project ToolsVersion=»4.0″ xmlns=»http://schemas.microsoft.com/developer/msbuild/2003″> <ItemGroup> <ExcludeFromPackageFiles Include=»**/*.less»/> <ExcludeFromPackageFiles Include=»**/*.css.map»/> </ItemGroup> </Project> Из пространства …

Делаем свою капчу (asp.net, c#)

Механизм капчи такой: генерируем картинку с рандомным кодом из символов, запоминаем этот код в сессии, показываем поле пользователю для ввода кода с картинки и после отправки этого поля, делаем проверку на совпадение этого кода с кодом хранящимся в сессии. Создадим класс, который будет генерировать код и создавать картинку public class SimpleCaptcha { public string Generate(Stream stream) { …

Делаем позднее связывание при помощи ninject (c#)

Для этого устанавливаем пакет Ninject.Extensions.Xml при помощи менеджера пакета nuget. Создаем файл NinjectRegistrations.xml в корне приложения <module name=»NinjectRegistrations»> <bind service=»WebApp.Interfaces.IElmahWrap, Core» to=»WebApp.Mvc.Infrastructure.ElmahWrap, PresentationLogic» scope=»singleton» /> <bind service=»WebApp.Interfaces.ICaptcha, PresentationLogic» to=»WebApp.Infrastructure.DefaultCaptcha, PresentationLogic» scope=»singleton» /> </module> В Global.cs прописываем следующие строки var kernel = new StandardKernel(); if (System.IO.File.Exists(AppDomain.CurrentDomain.BaseDirectory + «\\NinjectRegistrations.xml»)) kernel.Load(AppDomain.CurrentDomain.BaseDirectory + «\\NinjectRegistrations.xml»);

Делаем pagination (asp.net, c#)

Реализуем пагинацию, которая будет содержать кнопки вперед, назад, переходы на первую, вторую, предпоследнюю, последнюю и собственно переходы по номерам страниц. Такая пагинация будет выглядеть примерно так:  И так приступаем. Создадим представление _Pagination.cshtml @model Pagination <ul class=»pagination»> @for (var i = 0; i < Model.Pages.Count; i++) { <li class=»@(Model.Pages[i].IsCurrenPage ? «active» : «») @(Model.Pages[i].Disabled ? «disabled» : …

Делаем авторизацию на основе базовой http аутентификации

В прошлой заметке я описывал как работать с базовой аутентификацией. Минус в этом подходе в том что логин и пароль браузер будет отсылать каждый раз, когда будет запрашиваться страница с ограниченным доступом. Но можно исправит этот недочет. Отослать логин и пароль один раз, а затем на сервере записать в сессию текущего пользователя, то есть все …