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

Пользовательские атрибуты для валидации в 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; } …

Передаем списки значений в контроллеры

В asp.net-mvc как только начинаешь сталкиваться с передачей списков значений в контроллеры, так сразу понимаешь как же все таки неудобно сделан привязчик значений к модели. Если вы работали в php, то для того чтобы передать список значений — вы писали такие строчки: 1) ?filterIds[0]=1&filterIds[1]=2&filterIds[2]=3, или 2) ?filterIds[1]=2&filterIds[2]=3, или 3)?filterIds[]=1&filterIds[]=2&filterIds[]=3 Но в asp.net-mvc дело обстоит намного иначе. Для …

Отправляем сообщения используя 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

Настройка маршрутов в 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) { …

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

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

Компилируем 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 контейнером. Весь фокус автоматической регистрации заключается в том что при именовании интерфейсов и сервисов нужно соблюдать некие соглашения. …