Задать вопрос
Ответы пользователя по тегу ASP.NET
  • Как универсально сформировать Response?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    "Какой вид response лучше всего отправлять?"


    Какой удобнее. Перед тем как код писать надо хотя бы подумать, в каком виде ответ ожидается/легче использовать.
    OpenAPI для согласования API тебе в помощь

    С другой стороны, если я отправляю DTO на фронт, то фронтер должен сопоставить свой класс с моим, наверное, это тоже проблематично при большом количестве полей


    Есть готовые фреймворки для такого. Например, GraphQL - можно указать что конкретно тебе нужно.
    Есть и другие, как OData. Либо можешь свой написать, чтобы клиент сам указывал поля, какие нужны.

    Стоит ли вообще приводить response к массиву?


    Нигде не видел подобного поведения. Если бы был пример ответа в таком формате, то мог бы сказать.
    Если имеется ввиду вместо объекта - массив значений его полей, то это плохая затея.
    Ответ написан
    Комментировать
  • Как свести ответы сервисов к одной сущности asp net core web api?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Зачем везде возвращать IBaseResponse? В нем описание и статус код - они повторяют HTTP метод работы. Разницы между ними никакой. Это явное протекание абстракций.
    Лучше сделать так:
    1. В контроллере вызываешь GetProductById.
    2. Если вернул null, то создаешь ответ 404 There is not product with this id
    3. Если возникла ошибка - возвращаешь 500
    4. В противном случае возвращаешь ответ

    Не смешивай логику и представление
    Ответ написан
  • Как передать токен в заголовок?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Ты используешь [Authorize] атрибут из фреймворка для авторизации, но при этом не следуешь правилам, чтобы фреймворк понял, что клиент авторизован. Как минимум - откуда он узнает, что токен для авторизации находится именно в куках с именем token?

    В HttpContext есть метод SignInAsync. Этот токен нужно передавать туда, а не в куки. Дополнительно, нужно правильно настроить процесс авторизации.

    Держи туториал по JWT авторизации

    if (token is not null)
         {
             _httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
             _httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
         }

    - Этот код не имеет смысла, так как заголовок выставляется для созданного _httpClient, а не в запросе (дополнительно, Middleware - синглтон, а _httpClient у тебя один, он не может делать параллельные запросы)
    Ответ написан
    Комментировать
  • Где можно посмотреть реализацию готовых и профессиональных WebAPI в связке с клиентом?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Microsoft создал референсный микросервисный проект - eShopOnContainers. Там есть основные паттерны проектирования, клиенты различные (ajax, mvc).

    А вообще, это только часть общего репозитория с проектами под различные кейсы - dotnet-architecture

    Если есть время, то можно и книгу прочитать по этой архитектуре
    Ответ написан
    Комментировать
  • Как передать массив FormData через ajax?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Попробуй [FromForm]
    атрибут в аргументе контроллера
    Ответ написан
  • Как передать List из одного контроллера в другой через html-кнопку?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    resultString.AppendLine($"<button role=\"button\" class=\"sendBtn\"><a href=\"www.siteadress/api/reports/{serializedIngedientsList}\" style=\"text-decoration: none; color: #000000\"> Отчёт </a></button>");


    Вот здесь не тупая конкатенация должна быть.
    Во первых, URL строки должны экранироваться.
    Во вторых, здесь ты передаешь через путь, а надо через запрос (то что после ? идет).
    В третьих, если передавать через путь, то там не JSON, а собственная структура для сериализации.

    Почитай метанит
    Ответ написан
  • Почему не проходит Authorize?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    Надо указывать схему авторизации.
    В атрибут Authorize добавить надо строчку схемы авторизации.

    [Authorize(JwtBearerDefaults.AuthenticationScheme)]
    Ответ написан
  • Как добавить сервисы и использовать их в контроллерах?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    builder.Services.AddScoped<IService, ServiceImplementation>();


    в Program.cs

    Потом через конструктор контроллера получаешь интерфейс.
    Ответ написан
    3 комментария
  • Почему не парсится JSON в Docker-контейнере?

    AshBlade
    @AshBlade Куратор тега C#
    Просто хочу быть счастливым
    1) Может у вас прокси стоит, который заголовки удаляет?

    Логи говорят, что невозможно выполнить согласование контента (content negotiation).

    2) Попробуйте вручную зарегистировать Json форматтер для запросов первым с списке.

    В списке первым стоит `Microsoft.AspNetCore.Mvc.Formatters.HttpNoContentOutputFormatter`. Не работал с ним, но название говорит, что это какой-то Fallback класс, который просто скипает запрос
    Ответ написан
    Комментировать