Ошибка анализа Json при использовании метода /login из WebApiCore Identity, предоставленного [email protected]

При настройке аутентификации и авторизации с помощью конечных точек web.api и использовании:

\packages\microsoft.aspnetcore.identity.entityframeworkcore\8.0.6 \packages\microsoft.entityframeworkcore.sqlserver\8.0.6 \packages\microsoft.aspnetcore.spaproxy\8.0.6\

Я получаю следующую ошибку при попытке вызвать любой из созданных методов API: (например, /login или /register)

 Microsoft.AspNetCore.Http.BadHttpRequestException: Failed to read parameter "LoginRequest login" from the request body as JSON. ---> System.Text.Json.JsonException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0. ---> System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0.`

моя конфигурация следующая:

var myAllowSpecificOrigins = "_myAllowSpecificOrigins";
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCors(options =>
{
options.AddPolicy(name: myAllowSpecificOrigins,
policy => {
policy.AllowAnyMethod()
.AllowAnyHeader()
.SetIsOriginAllowed(origin => true)
.AllowCredentials();
});
});

// Add services to the container.
builder.Services.AddSingleton<IDictionary<string, UserConnection>>(opts => new Dictionary<string, UserConnection>());
builder.Services.AddSingleton<IDictionary<string, ChatRoom>>(opts => new Dictionary<string, ChatRoom>());

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSignalR();
builder.Services.AddDbContext(
options => options.UseSqlServer("Server=DESKTOP-EI90NJF\SQLEXPRESS;User Id=WebChatUser;Password=Password123;Database=WebChat")
);

builder.Services.AddIdentityCore()
.AddEntityFrameworkStores()
.AddApiEndpoints();

builder.Services.AddAuthentication().AddBearerToken(IdentityConstants.BearerScheme);
builder.Services.AddAuthorizationBuilder();

var app = builder.Build();

app.UseDefaultFiles();
app.UseStaticFiles();
app.UseCors(myAllowSpecificOrigins);
app.UseMiddleware();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.UseAuthorization();

app.MapHub("/chatHub");

app.MapFallbackToFile("/index.html");

app.MapIdentityApi();

app.MapControllers();

app.Run();

ОТРЕДАКТИРОВАНО: тест был выполнен с использованием пользовательского интерфейса Swagger, созданного приложением и настроенного с помощью (builder.Services.AddSwaggerGen(); app.UseSwagger(); app.UseSwaggerUI()).

Это как-то связано с атрибутом [FromBody], но я до сих пор не могу понять, в чем проблема.

Pedro Figueiredo 07.07.2024 23:15

Я воспроизвел вашу проблему с возвратом 400 badrequest, и мои данные пусты, но не равны нулю с пробелом или вводом. Каковы ваши данные и код состояния, какой HTML-код вы получили? Судя по сообщению об ошибке, проблема в том, что запрос на вход в систему не распознается. Было бы лучше, если бы вы могли поделиться.

Fengzhi Zhou 09.07.2024 09:18

Я просто вызываю это из сгенерированной страницы чванства. в теле есть: { "email": "[email protected]", "password": "Password" } : код состояния 400

Pedro Figueiredo 09.07.2024 09:50
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

После удаления этого промежуточного программного обеспечения все стало нормально анализироваться.

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

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

Чтение тела запроса в промежуточном программном обеспечении для .Net 5

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

Другие вопросы по теме