ASP. NET Core 3.1. Конструктор входа в систему возвращает NULL. Свойства входа в систему не связаны с запросом Post от JsonApiDotNetCore - PullRequest
1 голос
/ 23 февраля 2020

В настоящее время я обновляю ASP. NET Core Web API с 2.2 до 3.1. Я проверяю контроллеры через PostMan, чтобы убедиться, что все в порядке. Не то. При первой попытке входа в систему я отправляю действительное имя пользователя и пароль в запросе HttpPost через Postman в веб-API. Однако, когда он вызывает конструктор входа в систему, он возвращает NULL, что означает, что модель не содержит имя пользователя и пароль, которые я только что передал. Кто-нибудь знает, почему это происходит?

Примечание 1. Я уверен, что запрос Post, который я отправляю через PostMan, является правильным, поскольку я могу успешно отправить тот же запрос в. NET Core 2.2 web API .

Примечание 2: WebApi работает. NET Core 3.1 с JsonApiDotNetCore 4.0.0-alpha4, тогда как модель содержится в отдельном. NET Стандартном проекте 2.1 с JsonApiDotNetCore 3.1 ( Я не могу обновить до 4.0.0-alpha4, потому что он не поддерживает. NET Стандарт 2.1). Может ли это быть причиной?

Контроллер входа

using Test_Model.Users;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;

namespace Test_WebApi.Controllers.Tokens
{
    public class TokensController : ControllerBase
    {
        public TokensController(
            IConfiguration objConfig,
            ILogger<TokensController> objLogger,
            IServiceProvider objServiceProvider)
            : base(objConfig, objLogger, objServiceProvider)
        { }

        [AllowAnonymous]
        [HttpPost("/clients/login")]
        public async Task<IActionResult> LoginAsync([FromBody] Login objLogin)
        {
            return new JsonResult(objLogin);
        }
    }
}

Модель входа

using JsonApiDotNetCore.Models;
using System.ComponentModel.DataAnnotations;

public class Login
{
    // Constructor
    public Login() { } // When I place a breakpoint here, the debugger returns a NULL model in 3.1 but returns the model with the correct values from PostMan.

    // Properties
    [Required]
    [EmailAddress]
    [Attr("username")]
    public string UserName { get; set; }

    [Required]
    [Attr("password")]
    public string Password { get; set; }

    [Required]
    [Attr("rememberme")]
    public bool RememberMe { get; set; }
}

jsonapido tnet не заполняет свойства.

Обновление

Запрос почты почтальона:

{
    username: "test@test.com",
    password: "12345",
    rememberme: "false"
}

Настройки почты почтальона:

Body = Raw

Заголовки (ключ / значение):

Accept / application/json
Content-Type / application/json

1 Ответ

1 голос
/ 26 февраля 2020
  1. Начиная с 3.0, ASP. NET Ядро использует System.Text.Json по умолчанию JSON Сериализатор / десериализатор, который требует строгого синтаксиса JSON. Это поведение отличается от старого Newtonsoft. JSON.

  2. На самом деле даже полезная нагрузка поддерживается Newtonsoft. JSON, это недопустимое JSON:

    {
        username: "test@test.com",
        password: "12345",
        rememberme: "false"
    }
    

    (свойство JSON) должна быть строка, начинающаяся с ", см. JSON .org :

    object

    string

  3. Если вы хотите использовать JSON как то, что мы делали в старые времена, следуйте этому документам :

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...