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

Пользовательские атрибуты для валидации в asp.net-mvc

Для того чтобы реализовать пользовательский атрибут, нужно наследоваться от ValidationAttribute и переопределить свой метод IsValid. Реализуем атрибут который будет проверять дублирующие объекты по определенному полю. using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Web; namespace WebApp.ValidationAttributes { public class CheckDublicatesAttribute : ValidationAttribute { public CheckDublicatesAttribute(string field = «Id») { _field = field; } …

Получаем данные из appSettings при помощи Ninject

Создадим пользовательский атрибут ValueAttribute, который будет производным от атрибута InjectAttribute. Данный атрибут достает значение из appSettings, а Inject в свою очередь запишет это значение в указанное свойство. Реализация ValueAttribute: public class ValueAttribute : InjectAttribute { private static NameValueCollection _appSettings = WebConfigurationManager. AppSettings as NameValueCollection; public string Value { get; private set; } public ValueAttribute(string key) …

Отправляем сообщения используя SmtpClient (asp.net-mvc)

Напишем сервис для работы с SmtpClient public class EmailService : BaseService, IEmailService { [Value(«MailMessage.From»)] public string From { get; set; } [Value(«SmtpClient.Host»)] public string Host { get; set; } [Value(«SmtpClient.Port»)] public int Port { get; set; } [Value(«SmtpClient.EnableSsl»)] public bool EnableSsl { get; set; } [Value(«SmtpClient.Credentials.User»)] public string User { get; set; } [Value(«SmtpClient.Credentials.Password»)] public string …

Определим ip адрес пользователя (asp.net mvc)

protected string GetUserIP() { string ip = Request.Headers[«X-Forwarded-For»]; if (string.IsNullOrEmpty(ip) || «unknown».Equals(ip, StringComparison.InvariantCultureIgnoreCase)) { ip = Request.Headers[«Proxy-Client-IP»]; } if (string.IsNullOrEmpty(ip) || «unknown».Equals(ip, StringComparison.InvariantCultureIgnoreCase)) { ip = Request.Headers[«WL-Proxy-Client-IP»]; } if (string.IsNullOrEmpty(ip) || «unknown».Equals(ip, StringComparison.InvariantCultureIgnoreCase)) { ip = Request.Headers[«HTTP_CLIENT_IP»]; } if (string.IsNullOrEmpty(ip) || «unknown».Equals(ip, StringComparison.InvariantCultureIgnoreCase)) { ip = Request.Headers[«HTTP_X_FORWARDED_FOR»]; } if (string.IsNullOrEmpty(ip) || «unknown».Equals(ip, StringComparison.InvariantCultureIgnoreCase)) { ip …

Ограничение доступа по IP в asp.net-mvc

В Web.config пропишем <system.webServer> <security> <ipSecurity> <clear/> <add ipAddress=»192.168.100.1″ /> <add ipAddress=»169.254.0.0″ subnetMask=»255.255.0.0″ /> </ipSecurity> </security> </system.webServer> В applicationHost.config (расположен по пути%windir%\system32\inetsrv\config\applicationHost.config или c:\Users\calmsen\Documents\IISExpress\config\applicationHost.config) находим строчку: <section name=»ipSecurity» overrideModeDefault=»Deny» /> и заменяем на: <section name=»ipSecurity» overrideModeDefault=»Allow» /> Ссылки: http://www.iis.net/configreference/system.webserver/security/ipsecurity http://stackoverflow.com/questions/16220819/internal-server-error-with-web-config-ipsecurity

Обертка для написания пользовательских ошибок elmah

Elmah позволяет писать свои сообщения в лог таким образом: Elmah.ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Elmah.Error(new Exception(str))); Получается приходиться писать очень длинную строчку. Поэтому создадим класс — обертку, которая будет делать это за нас. using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApp.Infrastructure { public class ElmahWrap { public void Error(string message, Exception innerException) { Elmah.ErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Elmah.Error (new Exception(message, …

Ninject и AOP

Ninject имеет много расширений. Одно из полезных расширений это Ninject.Extensions.Interception.DynamicProxy. Данное расширение позволяет перехватывать вызовы методов, что позволяет вынести сквозную функциональность из наших модулей. Установим данный пакет и вынесем логику работы с транзакциями в Intercepter (перехватчик). Установим пакет Ninject.Extensions.Interception.DynamicProxy при помощи менеджера пакетов nuget. Создадим перехватчик для работы с транзакциями: public class TransactionInterceptor : IInterceptor { …

Настройка маршрутов в web api (asp.net, c#)

В web api контроллере можно создавать методы Get, Post, Put, Delete которые соответствуют запросам по названию. Это позволяет обращаться к этим методам посредством только наименования контроллера. А если создать другие методы (например GetSomething, DeleteSomething или PerformSomething), то будут конфликты при обращении к этим методам. Настроим маршруты так чтоб не было никаких конфликтов. context.Routes.MapHttpRoute( name: «ApiAction», routeTemplate: …

Настраиваем Ninject для web api и mvc

Создадим три класса NinjectDependencyResolver, NinjectDependencyScope и NinjectRegistrations. В NinjectDependencyScope реализуем интерфейс System.Web.Http.Dependencies.IDependencyScope public class NinjectDependencyScope : IDependencyScope { private IResolutionRoot resolver; internal NinjectDependencyScope(IResolutionRoot resolver) { Contract.Assert(resolver != null); this.resolver = resolver; } public void Dispose() { var disposable = this.resolver as IDisposable; if (disposable != null) { disposable.Dispose(); } this.resolver = null; } public object GetService(Type serviceType) { …