Ответы пользователя по тегу ASP.NET
  • Как правильно настроить Dependency Injection в ASP.NET MVC?

    Нужно разомкнуть зависимости.

    Когда Dependency Injection либа пытается ресолвнуть "самую глубокую" зависимость, в вашем случае это IAccountsService, то она не может этого сделать, т.к. встречает цикл.

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

    Это если хотите использовать инжект в конструктор, как в примерах выше.
    Как другое решение, не очень думаю для вашей ситуации, это использовать инжект в свойство. Он отработает даже с циклической зависимостью.

    По этой теме есть хорошая книга - Симан Марк "Внедрение зависимостей в .NET".
    Ответ написан
    2 комментария
  • Вопрос о многопоточности ASP.NET - как работают заблокированные потоки?

    ASP.NET MVC and Web API - Comparison of Async / Sy...

    Есть пул потоков.
    Пришел запрос - достали поток из пула, и он начал обрабатывать запрос.

    Если поток встретил await (запрос в БД например, не CPU bound операция) и результат не доступен (может быть доступен сразу), то он ушел обратно в пул. Когда await получит результат, то из пула достанут поток и передадут ему результат и он продолжит выполнение.

    Если поток встретит запрос в БД, но не будет await, то он останется ждать результата, в пул не вернется, не сможет обслуживать другие запросы, просто будет ждать.

    Пример из жизни:
    Заказали пиццу по телефону.
    - синхронно - идем к двери и ждем звонка от курьера.
    - асинхронно - занимается другими делами, когда курьер доставит пиццу он позвонит в дверь и мы подойдем за ней.

    Асинхронность != многопоточность, это ее часть.
    What is the difference between asynchronous progra...
    Ответ написан
    2 комментария
  • Правильно ли я пишу на asp.net Core?

    1) Репозиторий - коллекция, и методы работы с ней как с коллекцией, ничего лишнего.
    2) Controller - посредник между View и Model (стиль MVC). В нем не должно быть никакой бизнес логики, а значит и открытия коннекта и выполнения запроса с его текстом. Тут должен быть вызов компетентного исполнителя - сервиса.

    Рекоменую посмотреть на - CleanArchitecture https://github.com/jasontaylordev/CleanArchitecture

    Посмотрите на готовые сайты:
    https://github.com/nopSolutions/nopCommerce
    https://github.com/simplcommerce/SimplCommerce
    И крутого монстра - https://github.com/dotnet-architecture/eShopOnCont...

    Все сразу не запомнится и не зайдет, это долгий путь.

    Самый лучший курс от 0 до норм понимания - https://codewithmosh.com/p/become-a-full-stack-net...
    Состоит из трех частей, где автор создает готовое приложение вроде мини соц сети с музыкой, вроде.
    Можно в целом его посмотреть, и делать как он, не промахнешся.
    Ответ написан
    Комментировать
  • Как правильно написать файловый сервис на asp.net core web api?

    1) Можно использовать БД для всего. Там и файл, и ссылка на него.
    + все в одном месте.
    + легко бекапить.
    + транзация на всю операцию целиком.
    - база будет очень большой.

    2) Можно использовать БД только для хранения ссылок на файл.
    + БД маленькая.
    + хранилище отдельно.
    - бекап БД и хранилища файлов осуществляется раздельно.
    - нет транзакций, файл может быть записан, а ссылки не будет, и на оборот.

    БД - SQL или NoSQL.
    Т.к. связей нет, то лучше NoSQL.

    Безопасность - Авторизация, токены или куки. Ничего другого.
    Тут либо сервис во внутренней сети, и ничего не нужно. Или сервис доступен снаружи, и нужна авторизация.
    Можно погуглить как работает Azure Blob storage, идеи взять от туда.

    Проблема с размером решается, больше гуглить.
    Ответ написан
    Комментировать
  • Ресурсы по изучение ASP.NET CORE?

    Я почти всегда по таким вопросам первым делом захожу на metanit.com.
    А так верно, если хочется не просто ознакомиться что там такого, то оф документация и курсы на https://docs.microsoft.com/ru-ru/learn/.
    Ответ написан
    Комментировать
  • Атака из "режима разработчика". Как защититься?

    Нет такой защиты, ее не существует.
    csrf тут не причем, никакой скрипт не пытается выполнится.

    F12 доступна всем, пользователь получил копию документа (HTML, CSS, JS), и может с ней сделать что угодно.
    Точно также он может посмотреть HTTP запрос, и отправлять туда что угодно не используя браузер.

    На хабре давным давно описывали проект, который защищает от подобного. Мол человек заходил из своего браузера в другой браузер, где нет F12, и уже там открывается сайт. Можете погуглить эту статью.

    Клиентский код выполняется и хранится на клиенте, клиент может с ним делать все что пожелает.
    Сервер должен проверять каждый запрос на валидность, не зависимо ни от чего. Любой запрос считается не правильным, если не доказано обратное.

    Посмотрите на Postman, Fiddler2, Burp. Это ПО специально для того что бы смотреть и изменять ответ-запрос.

    Посмотрел комменты к другим ответам.
    - Сервер не должен принимать стоимость товара полученные от клиента как действительную. Клиент получил копию цены, ее значение на момент запроса. Это просто информация для клиента, не для сервера. Только сервер знает текущую стоимость, клиент может запросить ее значение в определенный момент времени, и все.
    А вот что делать если клиент успел выполнить заказ по старой цене, а на сервере уже новая, это задача анализа (для аналитиков).

    Вам достаточно изучить код любого интернет магазина, как реализовано там. Книгу поискать где подобное приложение разбирается.
    Ответ написан
    Комментировать
  • C# EF SQL как сделать запрос?

    Через EF:
    1) Получить строки по условию из БД.
    2) Удалить полученные строки, вызвав метод Remove/RemoveRange на репозитории или как вы их получаете.
    Да - чтобы удалить нужно сначала загрузить, это ограничение чистого EF. Данные гоняются два раза.

    Через SQL:
    1) Пишем SQL скрипт.
    Минус - лучше избегать SQL при использовании EF, т.к. при переименовании свойств, таблиц - скрипты нужно будет искать и править отдельно. Их сложнее тестировать, изменять и т.п.

    Через расширение для EF:
    1) Пишем context.BulkDelete(customers, options => УСЛОВИЕ ) и все.
    Ищем аналоги https://entityframework-extensions.net/bulk-delete, есть бесплатные точно.
    В этом случае мы используем EF, не пишем SQL, при этом данные не гоняются дважды, код чище, понятней и т.п.
    Ответ написан
    5 комментариев
  • Как сделать генератор тестов ASC.NET C#?

    Проще самому сделать.

    class Question {
    List<Answer> Answers { get; set; }
    }
    
    class Answer {
    string Text;
    bool isValid;
    }


    На metanit.com/sharp/ читаем про Entity Framework, делаем приложение по шаблону сущности (создать, прочитать, удалить), и накидываем функционал. Можно найти видео как люди делают список книг или еще что-нибудь похожее, и переделать это под свое.
    Ответ написан
    Комментировать
  • Как изменить DTO в проекте?

    При изменении DTO миграции не будет, как вы правильно заметили, это не изменяет entity.
    Entity маппится на БД (атрибуты или fluent annotations), и ее изменения уже требуют миграции.
    Entity также маппится на DTO, при помощи разных способов, руками или фреймворками (вроде AutoMapper).

    Получается что вы забыли прописать новое поле в маппинг Entity -> DTO. Раз оно не подхватилось автоматически, значит имя поля DTO отличается от имени поля в Entity или маппинг ручной там.
    Ответ написан
    Комментировать
  • Есть ли смысл инкапсулировать обработку исключительных ситуаций, вынося код из контроллера в метод сущности?

    1) Контроллер - связывает UI и логику, но это не сама логика, максимум тут подготовка модели к дальнейшей передаче. GRASP - Контроллер.
    2) Логику по получению, маппингу и т.п. переносим в сервис. SomeModelService например.
    3) Repository - просто коллекция, никаких not_found там нет.
    4) Данный сценарий как я понял обновляет существующую сущность. Значит вероятно следует добавить проверку на конкуретный доступ, оптимистический, т.к. это веб. Т.е. пусть в SomeModel будет значение версии, дата или int или что вам удобно. И хендлинг всех возможных ситуаций делайте не в контроллере а в сервисе. Т.к. UI может добавится другой.
    5) Вместо конкретных репозиториев и сервисов используйте интерфейсы. SOLID, буква D. Это позволит легко тестировать приложение, и разрабатывать модули не ожидая все другие модули, которые вы используете.

    Но если приложение простое, или учебное, то можно просто забить на все это, т.к. оверхед большой, и пилить как удобно. В таком случае разницы между 1 и 2 способ не много, но 1-ый чище.
    Примеры всяких GetOrXXX хорошо подсмотреть у C# LINQ. FirstOrDefault и т.п.
    Ответ написан
  • Что нужно знать начинающему разработчику asp.net mvc?

    Карта развития IT
    Учить можно на https://itvdn.com/ru и https://edu.cbsystematics.com/ru/education/special...

    Нужно выучить до уровня - могу сделать небольшой для ХХХ. Как тестовое задание.
    Лучше сразу задуматься про SPA (react, angular), но этому уже на работе можете научится.
    Ответ написан
    3 комментария
  • Где найти практический курс ASP.NET MVC 5 на примере реальной (или подобной) коммерческой разработки?

    Become a Full-stack .NET Developer


    In particular, you’ll learn how to:

    Extract core use cases from requirements
    Build an application end-to-end in a systematic fashion
    Use Entity Framework code-first workflow to build a model
    Build RESTful APIs using ASP.NET Web API
    Use CSS to build beautiful user interfaces
    Improve usability of your applications
    Implement security best practices
    Write clean, maintainable and robust code
    Refactor your code
    Version your code using TFS
    Implement clean and decoupled architecture
    Write automated tests
    And more…


    Там и MVC и верстка и JS. И отдельный курс по MVC.
    В самом низу странички 3 курса, где автор делает сайт похожий на настоящий.
    Ответ написан
    1 комментарий
  • Нужно ли выделять под каждую категорию на сайте контроллер?

    Become a Full-stack .NET Developer. (отличный видеокурс, 3 серии уроков)

    Если категории независимы, и вероятнее всего будут развиваться/меняться независимо, то расположить их следует отдельно.

    Но сходу сделать правильно не получится. Архитектура (то как система разбита на части, и как они между собой взаимодействуют) меняется со временем, некоторые составные компоненты разбиваются на несколько более мелких, другие наоборот объединяются (что происходит значительно реже).

    Ничего страшного не будет, если сначала все будет в одном месте, т.к. непонятно что будет дальше, и все похоже, но со временем уже и требования изменятся, и более понятно будет что делать.
    Ответ написан
    Комментировать
  • Почему EF6 CodeFirst many-to-many конфликтует с ForeignKey?

    Лучше использовать Fluent API Отношения между моделями в Fluent API

    Вы я так понял хотите в "Event" иметь и список Client, и еще одного Client который куратор. Это тыкать нужно, некоторые вещи EF не может сделать либо за одну миграцию, либо вообще.
    Ответ написан
    Комментировать
  • ASP.NET: можно ли вынести контроллеры в отдельный проект при использовании IoC?

    Почитайте Макр Симана - внедрение зависимостей.
    IoC - самое "грязное" место. Размещайте его в точке старта приложения, где ему и место.
    Ответ написан
    Комментировать
  • Существует ли в контексте ASP.NET MVC такое понятие как события?

    1) Используйте Web API.
    2) Используйте SignalR.

    JS клиент SignalR будет эмулировать постоянный коннект с SignalR на сервере.
    Вы получите то что хотите.

    SignalR - это абстракция над несколькими способами реализации "реалтайма" между клиентом и сервером. Какой именно способо будет использоваться договорятся клиент и сервер самостоятельно или вы подкрутите нужные вам.
    Ответ написан
    Комментировать
  • Как правильно передавать данные в ASP.NET?

    https://docs.microsoft.com/en-us/azure/architectur...

    /api/user
    дальше HTTP глаголы.
    Для POST, PUT данные будут в теле запроса.
    Для GET, DELETE данные будут в URL.

    Не надо писать
    /api/user/add
    /api/user/1/rename
    /api/user/1/delete
    Ответ написан
    Комментировать
  • Как лучше учить и практиковать ASP.NET CORE?

    0) Почитать метанит.

    1) Сделать руками 1 или два примера из блога - https://chsakell.com/category/asp-net-core/
    1.1 - https://chsakell.com/2016/06/23/rest-apis-using-as...
    1.2 - https://chsakell.com/2016/10/10/real-time-applicat...
    Там Core старый, но за одно и лучше отличия в новом рассмотрите, сразу на 2.1 пишите.

    2) Посмотреть курс Build a real-world app with ASP.NET Core and Angular 2 - https://programmingwithmosh.com/build-a-real-world...
    Все по полочкам разложит, после 1 пункта будет понятно что и как делать.
    Ответ написан
    Комментировать
  • Как создать счетчик уникальных просмотров страниц с использованием C # и Asp.Net Core?

    Как Петр говорит или что то подобное или никак.

    HTTP
    HTTP_header_field

    Подробней напишите что является критерием уникальности в вашем случае.
    Одно устройство, один браузер, один пользователь или еще что то.
    Нужна статистика для всех страниц, или для одной.

    Можно использовать JS или нет.
    JS может много инфы достать.
    Погуглите - how google analytics work.

    C# сам по себе ничего толком в вашем случае не сможет сделать, кроме cookie.
    Ответ написан
    Комментировать