Ответы пользователя по тегу .NET
  • Как отключить редирект на Identity/Account/Login из CustomAuthorizationAttribute?

    sarapinit
    @sarapinit
    Точу водой камень
    services.ConfigureApplicationCookie(options =>
    {
        options.Events.OnRedirectToLogin = context =>
        {
            context.Response.StatusCode = 401;
            return Task.CompletedTask;
        };
    });
    
    services.AddAuthentication(options => options.DefaultScheme = "Cookies").AddCookie("Cookies", "Cookies", options => {
        options.Events.OnRedirectToAccessDenied = context => 
        {
            context.Response.StatusCode = 403;
            return Task.CompletedTask;
        }
    }
    Ответ написан
  • C# .NET в Линукс. Хочу попробовать. Кто отговорит?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Кто нибудь знает как .NET ведет себя в плане потребления ресурсов?

    Как любой язык со сборщиком мусора, он вынужден прерывать исполнение для сборки мусора. Поэтому нужно быть аккуратным с аллокациями в "горячих" путях исполнения. Советы по оптимизацию сборки мусора давно описаны, даже книга целая написана. Вот только с профилировщиками под Линукс пока не очень.

    Также есть нюанс с размером файлов который достаточно большой даже в Release сборке. Это происходит потому что библиотеки кладутся рядом с исполняемым файлов в полном размере, ничего не обрезается. Сейчас идут работы по компиляции в один файл и уменьшению размера этого файла, но там есть нюансы. Например для решений с динамической загрузкой сборок или использующих рефлексию (в некоторых случаях), обрезка все сломает. То есть надо быть готовым к тому что папочка Release будет весить 100-200МБ
    Ответ написан
    Комментировать
  • Как установить политику авторизации для запроса ASP.NET core?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    https://docs.microsoft.com/en-us/aspnet/core/secur...

    Вроде как есть возможность получить httpcontext
    Ответ написан
  • Как настроить сборку .Net проекта на 2 фреймворка?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <TargetFrameworks>netcoreapp3.0;net5.0</TargetFrameworks>
      </PropertyGroup>
    </Project>


    https://docs.microsoft.com/en-us/dotnet/standard/f...
    Ответ написан
    1 комментарий
  • Как склеить несколько подмассивов расположенных в одном массиве типа Object?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    DEL (первое решение было неверным)

    UPD:

    private static Array Combine(params object[] arrays)
            {
                if (arrays.Length == 0) return null;
                if (arrays.Length == 1) return (Array)arrays[0];
    
                var totalLength = ((Array)arrays[0]).Length;
                var elemType = arrays[0].GetType().GetElementType();
                for (int i = 1; i < arrays.Length; i++)
                {
                    var nextElemType = arrays[i].GetType().GetElementType();
                    if (nextElemType != elemType) return null;
                    totalLength += ((Array)arrays[i]).Length;
                }
                
                Array resultArray = Array.CreateInstance(elemType, totalLength);
    
                var offset = 0;
                foreach (Array array in arrays)
                {
                    Array.Copy(array, 0, resultArray, offset, array.Length);
                    offset += array.Length;
                }
    
                return resultArray;
            }
    Ответ написан
    2 комментария
  • Почему иногда данные по TCP доходят корректно, а иногда нет?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    ns.Read(headerBuffer); // прочитали заголовок
    Вот здесь нет гарантии, что вы прочитали именно столько байт сколько у вас буфер.
    Поэтому метод Read возвращает количество фактически прочитанных байт.
    Это классические проблемы чтения, про которые можно почитать тут
    Там как раз про то, как решить это все с помощью pipelines, которые упоминал Василий Банников
    Ответ написан
    1 комментарий
  • Как передать несколько больших файлов по TCP при помощи .NET?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Сначала слать размер файла затем файл. Вычитывать размер, вычитывать заданное количество байт и снова вычитывать размер и т. д.
    Ответ написан
    7 комментариев
  • Зачем использовать override, new для переопределения, сокрытия?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Тут не про использование метода из базового класса на самом деле.
    Суть в том что переопределенный метод будет работать если привести класс к базовому классу A,
    а перекрытый метод будет работать только в конкретном классе B.

    new
    class A { public string GetInt() => "10"; }
    class B : A {public new string GetInt() => "20";}
    
    B item= new B();
    item.GetInt(); // вернет 20
    A item2 = (A)item;
    item.GetInt(); // вернет 10


    override
    class A { public virtual string GetInt() => "10"; }
    class B : A {public override string GetInt() => "20";}
    
    B item= new B();
    item.GetInt(); // вернет 20
    A item2 = (A)item;
    item.GetInt(); // вернет 20
    Ответ написан
    Комментировать
  • Что будет делать поток №1?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Выделенный на задачу (Task), поток дойдет до CalcInternalAsync, далее он либо выполнится синхронно, если это возможно, либо вернется в пул потоков на время выполнения асинхронной работы.
    Когда асинхронная работа закончится, из пула потоков снова возьмется поток (не обязательно тот же), в котором выполнится продолжение.

    Тут надо думать учитывая пул потоков и стейт машину в которую преобразуется async\await. А про асинхронную работу стоит думать как про работу которую выполняет не процессор, а следовательно и поток для нее не нужен.
    Ответ написан
    1 комментарий
  • Зачем нужен StringBuilder? В каких случаях нужно использовать StringBuilder? Что мы выиграем используя StringBuilder?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Вот у нас есть две огромные строки каждая условно по 1 гигабайту. Вот мы их конкатенируем с помощью String.Concat получим третью строку длинной 2 гигабайта. Сделаем тоже самое с помощью StringBuilder. Что мы выиграем?

    В этом случае ничего.

    StringBuilder позволяет снизить потребления памяти в случае если вы постепенно инкрементите какую-то строку, например генерите json из кусочков.
    String.Concat будет каждый раз создавать новую строку и аллоцировать память.
    StringBuilder содержит в себе коллекцию Char, которая дополняется и памяти аллоцируется меньше.

    В документации это подробно изложено, рекомендую
    https://docs.microsoft.com/ru-ru/dotnet/api/system...
    Ответ написан
    Комментировать
  • Route parameter constraint 'mongoId' not resolved. Почему?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    В доках написан такой вариант конфигурации:
    services.AddRouting(options =>
    {
        options.ConstraintMap.Add("customName", typeof(MyCustomConstraint));
    });

    и написано, что можно также сделать через конфигурирование RouteOptions, как у тебя.

    Я не уверен, что это поможет, но проверил бы 1й вариант тоже, вдруг баг какой.

    UPD:
    Проверил у себя, в MongoIdConstraint заходит -- уже хорошо.
    Я почти полностью уверен, что регекс неверный,
    должен быть
    @"^[0-9a-f]{24}$"
    Ответ написан
    4 комментария
  • Есть ли смысл изучать ASP.NET?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Есть ли смысл изучать его ради маленьких в пару страниц сайтов (но всё же серверным функционалом, не просто "отдать html по ссылке")?

    Для таких целей вам подойдет та часть asp.net которая называется Razor Pages. Как раз познакомитесь с шаблонизацией страниц.

    Но вообще, использование aspnet предполагает более глубокое знание языка. Поразбираться придется. Так что если не хотите тратить время, лучше остаться на простых страничках.
    Ответ написан
    Комментировать
  • Актуален ли .NET для старта карьеры в качестве junior backend в 2021 году?

    sarapinit
    @sarapinit
    Точу водой камень
    Ну вот на хэдхантере сейчас:
    По России 1673 вакансии с требованием asp.net
    из них:
    - под "нет опыта" 132
    - под "от 1 до 3 лет" 750

    Смотрим далее по Go 3903 вакансии:
    - под "нет опыта" 1190
    - под "от 1 до 3 лет" 1239

    Смотрим далее по Django 1080 вакансий:
    - под "нет опыта" 67
    - под "от 1 до 3 лет" 557

    Смотрим далее по Ruby 911 вакансий:
    - под "нет опыта" 86
    - под "от 1 до 3 лет" 388

    Вот и считайте
    Ответ написан
  • Как избавится от дублирования в контроллере?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Зависит...
    Много от чего
    Надо понимать контекст, потому что спектр решений широк: от "оставить как есть" до "вынести в сервис", от "сделать сущность доменной области и в ней метод" до "вынести в метод расширения"
    Ответ написан
  • Как использовать конкретную зависимость в ASP.NET Core DI?

    sarapinit
    @sarapinit
    Точу водой камень
    В доках вижу вот такую перегрузку:
    public static Microsoft.Extensions.DependencyInjection.IServiceCollection AddHostedService<THostedService> (
    this Microsoft.Extensions.DependencyInjection.IServiceCollection services, 
    Func<IServiceProvider,THostedService> implementationFactory
    ) where THostedService : class, Microsoft.Extensions.Hosting.IHostedService;


    значит вам подойдет что-то вроде:

    services.AddHostedService<Service>(sp => new Service(new Reader("1", "2")));
    services.AddHostedService<Service>(sp => new Service(new Reader("3", "4")));
    services.AddHostedService<Service>(sp => new Service(new Reader("5", "6")));


    UPDATE:
    Но это не работает, потому что регистрации для одного типа перезаписывают друг друга.
    mishkaaaaaa, вы уверены что вам нужен именно HostedService (как служба работающая в фоне)
    Ответ написан
  • Как правильно передать массив байт из приложения .NET Core, при помощи web api?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Раньше в js не было типа byte, поэтому массив байт кодировался в base64 string и отправлялся в строки. Скорее всего у вас происходит тоже самое. Попробуйте декодировать пришедшие байты с помощью Convert.FromBase64
    Ответ написан
    3 комментария
  • План изучения C# чтобы стать C# junior - как улучшить?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Могу дать список из личного опыта. Я менял профессию из эксплуатации телекоммуникационых систем перешел в программисты.
    К моменту получения 1й работы:
    - Я прошел 2 курса: Базовый по языку C# и базовый по TSQL (кстати тоже от ITVDN, лысый дядька норм объясняет).
    - Прочитал книгу Адама Фримена про asp.net.
    - Прочитал книгу Макконела "Совершенный код".
    - Научился в общих чертах пользоваться AspNet + EntityFramework + SqlServer

    Кстати, вот эта связка AspNet + EntityFramework + SqlServer очень часто мелькает в тестовых заданиях.
    Обычно хотят чтобы ты собрал простой сайтик-справочник, прикрутил к нему БД, прикрутил к нему авторизацию, и сделал пару форм и таблиц, чтобы продемонстрировать умение делать простой CRUD функционал.
    Надо сказать что книжка Адама Фримана примерно про это и рассказывает.

    На самом деле после трудоустройства и началось реальное обучение. Приходилось закрывать дыры в своих знаниях по вечерам и по выходным. Через год стало полегче. Наверное лучше найти какую-то стажировку еще на этапе обучения, чтобы пообщаться с реальными людьми и реальным кодом. Реальный мир лучше всего указывает недостатки и на то, что нужно изучать дальше.
    Ответ написан
    2 комментария
  • Какой подход загрузки данных в Entity Framework 6 выбрать?

    sarapinit
    @sarapinit Куратор тега C#
    Точу водой камень
    Это не взаимоисключающие вещи. Ленивая загрузка выполняется при обращении к свойству, если свойство еще не было загружено (она должна быть включена в настройках). Вы можете комбинировать эти подходы заранее загружая свойства с помощью жадной или явной загрузки для определенных запросов. Если свойство уже было загружено, то ленивой загрузке уже незачем работать. Главное понимать, как происходят запросы в БД при разных видах загрузки.
    Ответ написан
    Комментировать