Ссылочные локальные переменные в C# 7

Начиная с версии C# 7 в языке появилась возможность, позволяющая объявить локальную переменную, ссылающуюся на элемент массива или на поле в объекте:

int[] simpleArray = {0, 1, 2, 3, 4, 5, 6, 7, 8};
ref int simpleElementRef = ref simpleArray[3];

В примере выше simpleElementRef — ссылка на simpleArray[3]. Изменение simpleElementRef приводит к изменению элемента массива:

simpleElementRef *= 15;
Console.WriteLine(simpleElementRef);      // 15
Console.WriteLine(simpleArray[3]);        // 15

В качестве цели ссылочной локальной переменной может быть указан элемент массива, поле, или обычная локальная переменная. Целью не может быть свойство.

Читать дальше →

Авторизация в приложении через Вконтакте VK на C#

Данная публикация написана как простая инструкция для себя, на память, чтобы не забыть.

Предложенный вариант использовался для авторизации через токен VK в серверном приложении.

Для начала создадим метод отправки HTTP запроса и получения ответа от сервера:

/// <summary>
        /// Отправляем запрос на получение 
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        private static string GetRequest(string host, string req)
        {
            string str = "";

            var Vk = new HttpClient();
            Vk.DefaultRequestHeaders.Add("Connection", "close");

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(req);
            request.UseDefaultCredentials = true;
            request.PreAuthenticate = true;
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Method = "GET";
            request.Host = host;
            request.UserAgent = "RM";
            request.ContentType = "application/x-www-form-urlencoded";
            request.KeepAlive = false;

            using (HttpWebResponse responsevk = (HttpWebResponse)request.GetResponse())
            using (var stream = responsevk.GetResponseStream())
            using (var streamReader = new StreamReader(stream, Encoding.UTF8))
            {
                str = streamReader.ReadToEnd();
            }
            return str;
        }


Читать дальше →

Cors Policy в .Net Core Web Api - добавляем поддержку

Для добавления поддержки CorsPolicy в .NET Core приложении открываем файл Startup.cs и меняем методы ConfigureServices и Configure, следующим образом:

ConfigureServices
public void ConfigureServices(IServiceCollection services)
        {
            // Добавляем CorsPolicy
            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
            });
            
            
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }


Читать дальше →

Немного размышлений по поводу .NET Core

.NET Core появился уже достаточно давно, претерпел ряд изменений и даже обзавелся второй версией.

С появлением .NET Core в архитектуре .NET появилось понятие .NET Standard — представляет спецификацию интерфейсов, которые должны реализовывать все версии .NET, что дает возможность разработчикам создавать переносимые библиотеки, которые возможно использовать в разных реализациях .NET благодаря общему набору интерфейсов.

.NET Standard

Разные реализации .NET реализуют определенные версии .NET Standard.

Читать дальше →

C# .NET - Получение информации по пользователю в домене

В данной публикации приведен пример получения информации по пользователю в домене AD с использованием C#.

Для того чтобы всё заработало необходимо подключить библиотеку:
using System.DirectoryServices.AccountManagement;


Затем можно получать параметры по пользователю.

            PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

            var loginName = HttpContext.User.Identity.Name.ToString();

            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, loginName);

            if (user != null)
            {
                // Получаем SID пользователя
                var userSid = user.Sid;

                // Получаем EMail пользователя
                var userEmail = user.EmailAddress;

                // Получаем Количество неудачных попыток входа пользователя
                var userBadLogons = user.BadLogonCount;

                // ФИО пользователя ( отображаемое имя)
                var userName = user.DisplayName;

                // Системное имя (по сути логин)
                var userSamAccountName = user.SamAccountName;

                var userFullName = String.Format("{0} {1} {2}", userName, userSamAccountName, userBadLogons);
                ViewBag.Message = userFullName;
            }


Читать дальше →

Распознавание автомобильного номера с изображения на C# (.NET)

Распознавание номера .NETДовелось мне не так давно помогать с запуском одного проекта под .NET на WCF — под x64 систему, проект нормально работал на x86 но отказывался работать на x64. В целом как я и ожидал проблема решалась довольно просто, помимо основной проблемы всплыло ещё несколько, в процессе решения которых пришлось познакомиться с очень интересной библиотекой Emgu CV, которая позволяет делать множество замечательных вещей, среди которых распознавание номера на изображении.

Благодаря этой библиотеке можно очень легко и просто внедрить распознавание номера в свою программу. Вот я и решил поделиться новым знанием, вдруг кому-то захочется что-то эдакое реализовать. Например мне сразу пришла в голову идея автоматически открывающегося шлагбаума, без всяких брелков. :) Качество распознавания, скажем — так себе, хотя возможно я просто не достаточно разобрался в возможностях, и всё делал как по умолчанию в примерах, но тем не менее поиграться стоит — вещь интересная.

В принципе, в комплекте с библиотекой есть целый набор примеров, в том числе и пример с распознаванием автомобильного номера. Но в этой публикации я приведу свой пример.

Итак, приступим…

Читать дальше →