Что такое ReCaptcha? Добавление ReCaptcha на сайт


Для противодействия регистрации на сайтах ботов придумали механизм проверочных кодов (Captcha). Предполагается, что только человек в состоянии распознать такие изображения, а у роботов возникнут трудности с выполнением этой задачи. Стоит правда заметить, что нередко и у людей возникают проблемы с распознаванием подобных символов. Так вот со времене…читать далее

Маршруты ASP.Net MVC: как убрать home из маршрутов


По умолчанию, в ASP.NET MVC используются одинаковые маршруты для всех контроллеров. Однако, согласитесь, что странно выглядят маршруты вида your.site.url/home/about? Далее я приведу способ решения этой проблемы. В результате, ваши ссылки на действия контроллера Home будут иметь вид: your.site.url/about. В созданном Visual Studio проекте Asp.Net MVC…читать далее

Не запрашиваются данные по nullable полям в Linq to SQL


Недавно столкнулся с непонятным для меня поведением Linq To SQL. Я использовал в одной таблице nullable поле типа  int, которое в C# отображалось как int? соответственно. Как оказалось, при выполнении запросов с условием равенства этого поля переменной типа int?, в которой лежит  null значение  ничего не выбирается, хотя данные с таким значением эт…читать далее

Эмуляция private virtual в C#


В C++ есть возможность делать приватные методы виртуальными, это позволяет переопределять данный метод в базовом классе, но не позволяет вызывать базовый метод. В C# такой возможности нет, однако можно эмулировать похожее поведение Первое, что пришло мне в голову public class Base { protected virtual EventHandler GetActionHandler() { return null; }…читать далее

Использование методов-расширений в C#


Методы-расширения (extension methods)  появились в .Net 3.0. На первый взгляд кажется, что они не дают ничего нового. Однако, на самом деле, они позволяют писать изящный код и увеличить повторное использование кода в вашем проекте Иногда, по мере решения каких-то задач, возникает необходимость добавить какой-то метод к существующему стороннему типу…читать далее