About .NET, ASP.NET, MVC, C#, WPF, WCF and everything related to .NET and more.

Новая версия Captcha MVC 2.4

Категории: Программирование

Сегодня я выпустил новую версию библиотеки Captcha MVC, она доступна по этой ссылке или через nuget.

What's new:

  • Изменен интерфейс IIntelligencePolicy, добавлен интерфейс ​​ICaptchaManager в качестве параметра для всех методов.
  • Улучшена размер шрифта в изображении, спасибо пользователю abot.
  • Добавлен класс ​​ResponseTimeIntelligencePolicy - это зависящая от времени проверка для капчи, спасибо пользователю reinhardS за идею.
  • Добавлен класс ​​MultiIntelligencePolicy, который позволяет использовать несколько IIntelligencePolicy.
  • Добавлено перечисление ​​StorageType, используется IIntelligencePolicy.
  • Исправлена ​​проблема с DataContract сериализацией.
  • Добавлено свойство ​​AddAreaRouteValue в класс DefaultCaptchaManager .
  • Удалены устаревшие методы.
  • Мелкие изменения.
Ниже я опишу изменения более подробно.

Изменен интерфейс IIntelligencePolicy, добавлен интерфейс ​​ICaptchaManager в качестве параметра для всех методов.

В версии 2.3:
public interface IIntelligencePolicy
{
   bool? IsValid(ControllerBase controller, IParameterContainer parameterContainer);

   ICaptcha MakeIntelligent(ICaptcha captcha, IParameterContainer parameterContainer);
}
В версии 2.4:
public interface IIntelligencePolicy
{
   bool? IsValid(ICaptchaManager captchaManager, ControllerBase controller,
 IParameterContainer parameterContainer);

   ICaptcha MakeIntelligent(ICaptchaManager captchaManager, ICaptcha captcha, 
IParameterContainer parameterContainer);
}

Добавлен класс ​​ResponseTimeIntelligencePolicy

Этот класс позволяет задать время, в течение которого капча не будет считаться валидной.
Рассмотрим пример:
ICaptchaManager captchaManager = CaptchaUtils.CaptchaManager;

//Задаем время по истечении, которого капча будет проходить проверку.
TimeSpan time = TimeSpan.FromSeconds(4);
captchaManager.IntelligencePolicy = new ResponseTimeIntelligencePolicy(time);

Добавлен класс ​​MultiIntelligencePolicy

Этот класс позволяет комбинировать различные реализации интерфейса IIntelligencePolicy в одну.
Пример кода:
ICaptchaManager captchaManager = CaptchaUtils.CaptchaManager;

captchaManager.IntelligencePolicy =
    new MultiIntelligencePolicy(
        new ResponseTimeIntelligencePolicy(TimeSpan.FromSeconds(5)),
        new FakeInputIntelligencePolicy(),
        new JavaScriptIntelligencePolicy());

Добавлено перечисление ​​StorageType

Это перечисление позволяет выбрать тип хранения при использовании интерфейса IIntelligencePolicy. Поддерживаются два значения TempData и Session.

Добавлено свойство ​​AddAreaRouteValue

Капча теперь поддерживает Areas View для этого используется свойство ​​AddAreaRouteValue. По умолчанию этот параметр установлен в значение true, и вам не нужно ничего делать, чтобы добавить поддержку areas. Ниже приведен пример того, что нужно было сделать в предыдущей версии, чтобы добавить поддержку areas.
Пример кода:
protected void Application_Start()
{
    ...
    var captchaManager = CaptchaMvc.Infrastructure.CaptchaUtils.CaptchaManager;
    // По умолчанию true, и вам не нужно ничего делать, чтобы добавить поддержку areas,
    // Код ниже демонстрирует что нужно было сделать 
    // в предыдущей версии, чтобы добавить поддержку areas:
    captchaManager.AddAreaRouteValue = false;

    var defaultCaptchaManager = (DefaultCaptchaManager)captchaManager;
    defaultCaptchaManager.ImageUrlFactory = (helper, pair) => ImageUrlFactory(defaultCaptchaManager, helper, pair);
    defaultCaptchaManager.RefreshUrlFactory = RefreshUrlFactory;
}

private string RefreshUrlFactory(UrlHelper urlHelper, KeyValuePair<string, ICaptchaValue> keyValuePair)
{
    return urlHelper.Action("Refresh", "DefaultCaptcha", new { area = "" });
}

private string ImageUrlFactory(DefaultCaptchaManager captchaManager, 
UrlHelper urlHelper, KeyValuePair<string, ICaptchaValue> keyValuePair)
{
    return urlHelper.Action("Generate", "DefaultCaptcha",
                            new RouteValueDictionary
                                {
                                    {"area", ""},
                                    {captchaManager.TokenParameterName, keyValuePair.Key}
                                });
}
Спасибо за ваши отзывы.

Комментарии
Оставить комментарий
*bold*
_italics_
+underline+
* Bullet List
** Bullet List 2
# Number List
## Number List 2
{"Do not apply formatting"}
{code:language} code here {code:language}.
Supports: aspx c#, c#, c++, html, sql, xml
[url:http://www.example.com]