Записи с меткой «c#»

Делаем умный поиск c#

Самый легкий способ создать поиск по сайту это создать sql запрос с like к нужному полю таблички в бд. Такой запрос найдет только четкие совпадения по заданной подстроке. А что если хочется сделать поиск по подстроке в которой порядок слов не важен, то это нужно просто поделить подстроку на слова и сделать like к каждому слову. …

Делаем свою реализацию RemoteAttribute (asp.net-mvc)

В asp.net-mvc атрибут RemoteAttribute используется для того чтобы на клиенте удаленно проверять правильно ли пользователь ввел значение.  Это удобно, к примеру, когда нужно проверить существующий email или ник. Но недочет в том, что на самом сервере не производится повторная проверка после того, когда пользователь нажимает на кнопку submit. Исправим этот недочет. Наш класс: public class …

Делаем свою капчу (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» : …

Работаем с рефлектором в c#

В данной заметке представлены методы по работе с рефлектором в c#, в особенности получение значения по полному пути к свойству. using System; using System.Collections.Generic; using System.Linq; using System.Reflection; namespace App.Infrastructure { public static class ReflectorUtil { /// <summary> /// Gets property type by path /// </summary> /// <param name=»objType»></param> /// <param name=»path»></param> /// <returns></returns> public …

Базовая HTTP аутентификация

В данной заметке опишу как поднять базовую http авторизацию на своем сайте. Для начала вкратце опишу как работает механизм авторизации клиент запрашивает запрещенный ресурс сервер отдает страницу со статусом 401 и c заголовком WWW-Authenticate», «Basic realm=»My Realm» клиент смотрит на этот заголовок и предлагает пользователю ввести логин и пароль. Страницу 401 еще не отображается, пользователь видит белый экран. пользователь …

Защищаемся от xss (.net, c#)

public class HtmlSanitizer { private static readonly Regex HtmlTagExpression = new Regex(@» (?’tag_start'</?) (?’tag’\w+)((\s+ (?’attribute'(\w+)(\s*=\s*(?:»».*?»»|’.*?’|[^'»»>\s]+)))?)+\s*|\s*) (?’tag_end’/?>)», RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex HtmlAttributeExpression = new Regex(@» (?’attribute’\w+) (\s*=\s*) («»(?’value’.*?)»»|'(?’value’.*?)’)», RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Dictionary<string, List<string>> ValidHtmlTags = new Dictionary<string, List<string>> { {«p», new List<string> …