Задать вопрос
  • Как делается Авторизация и аутентификация на Blazor Server?

    SunnyPh
    @SunnyPh
    Привет, а в чем проблема то? Не очень понимаю вопрос....Если у вас Blazor Server, то значит все происходит на сервере, то есть SSR, и тогда вполне подойдет встроенная в ASP.NET - .NET Identity, ну или собственная реализация на основе .NET Identity, с использованием JWT токенов. Если сильно напрячься, то можно сделать независимый сервер идентификации Duende Identity Server, тогда можно будет все настроить и для Blazor-Wasm. Вот в этом плейлисте кое что о защите доступа в ASP.NET, где показан проект с использованием ASP.NET MVC и WEB API.NET, но вместо MVC может быть проект на Blazor-Server.
  • Какой должна быть архитектура веб-сервиса работающего одновременно с мобильным приложением и с браузером?

    SunnyPh
    @SunnyPh
    В принципе в первом ответе вам уже все подробно расписали, вот только тема защиты доступа к ресурсам API, для вашего случая, когда есть и мобильное приложение и видимо SSR MVC.NET Core, будет проблемной. В последнем .NET 8, уже заявлено какое то универсальное решение для авторизации и аутентификации, и оно отличается от встроенной в .NET Identity, и там еще надо разибираться. Но может быть вас устроит независимый сервис авторизации Duende Identity Server с JWT токенами? Вот в этом плейлисте кое что о таком решении....
  • Как получить доступ к wwwroot из другого проекта в web api?

    SunnyPh
    @SunnyPh
    Nik Faraday, видел решение проблемы сохранения файлов изображений в облаках, как BLOB формат, где загрузка изображений обеспечивается интерфейсом самого облачного сервиса (Azure например), а далее такая ссылка на облако хранится в базе данных для API.
    Однако это не самое удобное решение,
    и есть также возможность настройки сохранения файлов изображений,
    из интерфейса веб приложения,
    с последующей передачей этих данных в API.
    Но там нужно будет добавлять в представление FormFile,
    а также предусмотреть еще один формат для передачи данных,
    это MultipartFormData.
    Вот в этом видео,
    пример такого решения....
    Однако оба таких варианта (Облако и хранение на собственном сервере),
    были реализованы без выделения такой функциональности в отдельный сервис. Посмотрите как это работает в упрощенном виде,
    а потом сделайте это более сложным способом...
  • Как получить доступ к wwwroot из другого проекта в web api?

    SunnyPh
    @SunnyPh
    Веб API, может только принимать запросы по HTTP, и передавать данные по запросу, в том числе и статические файлы, для того что бы можно было получить такие файлы из любого другого приложения, включая клиент на MVC или Razor pages или другой WEB API, внешние приложения должны сформировать HTTP заросы, и при обработке такого запроса в конвейере исходного API, требуется также строка app.UseStaticFiles(); внутри этого проекта, а не во внешних приложениях.....Смотрите видео о том как работает REST API в .NET
  • Как из View передать в котроллер коллецию на пост запрос?

    SunnyPh
    @SunnyPh
    Может я ошибаюсь, но что бы не мучаться с кастомной реализацией Авторизацией и Аутентификацией пользователей в ASP..NET, можно взять за основу ASP.NET Identity, только там все представления и логика не в MVC, а на Razor Pages, без контроллеров но с хендлерами, и там уже много чего есть готового....Вот в этом плейлисте пример такой реализации....
  • Как из View передать в котроллер коллецию на пост запрос?

    SunnyPh
    @SunnyPh
    Проверьте есть ли у вас связь между View и методом типа HTTPGet - public async Task AddRole(Guid id, CancellationToken ct), то есть сначала создаете метод, потом через правую кнопку мыши при наведении на название метода, выбираете создать View, тогда при его создании они будут связаны в проекте в Visual Studio
  • Готовое решение для сервера мгновенных пользовательских сообщений?

    SunnyPh
    @SunnyPh
    .NET, SignalR, вот в этом видео об этом, с демонстрацией работы проектов, где есть общение в приватных сообщениях и в группах, или можно сказать комнатах...
  • Как лучше отправлять JSON-файл с сервера на устройство?

    SunnyPh
    @SunnyPh
    Используйте DTO . Если вы будете использовать передачу по HTTP данных из API, то совершенно не важно что и как используется в бекенде на уровне API, Entity Framework, Dapper или что то иное...,, вот в этом плейлисте есть некоторые материалы по архитектуре WEB.API на .NET 7, включая и использование DTO, для формирования ответов в формате json или ином формате....
  • Как вывести с upwork на paypal?

    SunnyPh
    @SunnyPh
    ну у меня вообще PayPal на Andrei, а карта на жену Joann, но фамилии одинаковые, и никаких проблем все переводится без вопросов
  • Как правильно обновить JWT токен перед HTTP запросом?

    SunnyPh
    @SunnyPh
    В этом видео, коротко будет рассмотрена настройка генерации и обновления Токенов Доступа и Токенов обновления, для API на .NET с клиентом ASP.NET MVC, включая вопросы защиты доступа к ресурсам API и алгоритма отслеживания цепочек токенов.
  • Как запустить сервер SignalR в консольном приложении Net 7?

    SunnyPh
    @SunnyPh
    В первом комменте, по сути вам уже ответили на вопрос.
    Могу лишь добавить что,
    1. На сервере в консольном приложении, нужно создать WebApplication,
    var builder = WebApplication.CreateBuilder(args);, и вы это сделали

    2. Далее нужно создать в контейнере сервис builder.Services.AddSignalR();,
    у вас также это сделано.

    3. Далее, нужно добавить компонент в конвейер обработки запросов,
    app.MapHub("/chatHub"); этого у вас нет

    4. Далее запустить app.Run(); это вы сделали.

    Но кроме того, нужно также настраивать и клиентскую часть.
    Пример настроек серверной части и браузерной клиентской части на JS, вот в этом плейлисте
  • Как принимать платежи на сайте с зарубежных стран?

    SunnyPh
    @SunnyPh
    coins.ph, однако верификация только по местному номеру, BIR, ID так что удаленно регаться не получится
  • Как правильно хранить изображения в SQL и как правильно работать с ними в WPF проекте?

    SunnyPh
    @SunnyPh
    EboLiK, Василий Банников уже ответил на этот вопрос, но есть подробное руководство по веб API.Net и клиенте на ASP.NET MVC, где в том числе, рассматривается вопрос автоматизации загрузки и хранения файлов изображений на локальном сервере с передачей в базу данных ссылок на такие файлы, вот вводное видео. И эта схема не совсем то что нужно для проекта на WPF, однако эти же подходы к решению проблемы, можно использовать и для монолитного приложения на WPF.
  • Передача сообщения через SignalR. Как сделать однократное соединение с сервером?

    SunnyPh
    @SunnyPh
    Согласен с тем что, особых проблем, в установке нового соединения по тайм ауту вообще то и нет. Но кроме этого хотелось бы добавить, что SIgnalR это обертка над тремя типами соединений Long Polling, SSE и WebSockets, не каждый из них действительно поддерживает непрерывное соединение, подробнее об этом вот в этом видео. И можно конечно жестко настроить что соединение может быть установлено через WebSocket, и задать произвольное время для такого соединения, но тогда не все веб клиенты смогут получать обновления данных, так как может быть такая ситуация, что некоторые из клиентов используют веб-браузеры без поддержки веб сокетов.
  • Какой курс по asp.net core вы можете посоветовать?

    SunnyPh
    @SunnyPh
    Интересуют только бесплатные курсы, или платные тоже? Один курс по всему ASP.NET, или что то конкретное типа Razor Pages, MVC, Blazor?
  • Как понять, что пользователь SignalR закрыл браузер (или перешел на другую страницу)?

    SunnyPh
    @SunnyPh
    Gedonist, Ну ок, видел реализацию, где используется идентификация пользователей с помощью ASP.NET Identity, далее, ведется список соединений открытых для каждого авторизовавшегося пользователя, так что проблема синхронизации различных девайсов и/или браузеров или девайсов, там решается на уровне идентификации пользователей в каждом из устройств, ну а группы используются, по прямому назначению, что бы управлять коммуникациями внутри групп. Вот в этом плейлисте, есть кое что на эту тему...
  • Как понять, что пользователь SignalR закрыл браузер (или перешел на другую страницу)?

    SunnyPh
    @SunnyPh
    Gedonist, Посмотрел, мне сложно разобраться в чем сейчас проблема.
    Увидел только, что вы пытаетесь реализовать самостоятельно, управление подключениями с помощью групп. Но в SignalR, уже есть готовый функционал для управления группами через вызов await Groups.AddToGroupAsync ( "идентификатор соединения", "название группы") или await Groups.RemoveFromGroupAsync ("идентификатор соединения", "название группы"), посмотрите примеры как это можно будет использовать для создания групп или комнат для общения в вашем проекте, может быть это поможет.
  • Как понять, что пользователь SignalR закрыл браузер (или перешел на другую страницу)?

    SunnyPh
    @SunnyPh
    Если у вас правильно формируется список коннектов в статическом списке _messagesHubUsers в классе Hub на сервере, то далее,
    после удаления элемента в этом статическом списке, нужно как то обратиться к логике вашего класса "UsersListChanged", который вероятно находится у вас на сервере, раз ваше приложение это Blazor-Server.
    И хотелось бы посмотреть его код и проверить что происходит обращение именно к нему, и что там происходит далее...
    А пока что вы просто пытаетесь сделать обратный вызов скрипта на JS - UsersListChanged, на какой то странице у всех активных клиентов.
  • Как универсально сформировать Response?

    SunnyPh
    @SunnyPh
    Можете попробовать самостоятельно создать стандартный ответ из API.
    Например:
    public class APIResponse
        {
            public APIResponse()
            {
                ErrorMessages = new List<string>();
            }
            public HttpStatusCode StatusCode { get; set; }
            public bool IsSuccess { get; set; } = true;
            public List<string> ErrorMessages { get; set; }
            public object Result { get; set; }
        }


    И такой класс с универсальным ответом из API, будет содержать статус код, признак того обработан ли успешно запрос,
    список строк с ошибками и собственно сам результат ответа, как тип Object, где может быть любой тип C#, в том числе массив. Но как по мне это должен быть в любом случае DTO, один или множество, все зависит от запроса.

    Далее, как пример, запрос HttpGet, для получения данных, о конкретном экземпляре , мог бы выглядеть примерно так, с использованием стандартного ответа:

    public async Task<ActionResult<APIResponse>> GetProductById(int id)
            {
                try
                {
                    if (id == 0)
                    {
                        _response.StatusCode = HttpStatusCode.BadRequest;    
                        return BadRequest(_response);
                    }
                   var product = await _productRepository.GetById(id);
                    if (product == null)
                    {
                        _response.StatusCode = HttpStatusCode.NotFound;
                        return NotFound(_response);
                    }
                    _response.Result = product;
                    _response.StatusCode = HttpStatusCode.OK;
                    return Ok(_response);
                }
                catch (Exception ex)
                {
                    _response.IsSuccess = false;
                    _response.ErrorMessages
                         = new List<string>() { ex.ToString() };
                }
                return _response;
            }


    Где _response в данном контексте, это APIResponse.

    Пример реализации такого подхода для WEB API в репозитории.
  • Как отображать в HTML разметки ответы gRPC стрима в asp net core?

    SunnyPh
    @SunnyPh
    SignalR можно использовать для такого класса задач, на бекенде сделать Hub SignalR, на фронте использовать скрипт на JS для работы с серверным Hub, а также кастомный скрипт, который будет изменять текущие значения на странице в HTML, без активных действий пользователя.