C# .net core web api параметр x-www-form-urlencoded всегда равен нулю

У меня есть этот метод, который выглядит примерно так:

/// <summary>
/// Updates the status to paid
/// </summary>
/// <param name="data">The data from world pay</param>
/// <returns></returns>
[HttpPost]
[Consumes("application/x-www-form-urlencoded")]
public IActionResult Residential([FromForm] string data)
{
    if (string.IsNullOrEmpty(data)) return BadRequest("No data was present");

    var model = JsonConvert.DeserializeObject<WorldPayResponseModel>(data);

    // ----- removed from brevity ----- //

    return Ok(true);
}

Когда я использую почтальон для отправки каких-то данных, он всегда равен нулю.

Кто-нибудь знает, почему это может быть?

1 ответ

Решение

Создайте модель /DTO для публикуемых данных, ядро ​​.net должно обрабатывать привязку (привязка модели в ASP.NET Core).

Кажется, у тебя уже есть WorldPayResponseModel, так почему бы не привязаться к этому? Например:

public class WorldPayResponseModel
{
    public string CardType { get; set; } 
    public int CardId { get; set; } 
    // other properties
    ...
}

[HttpPost]
[Consumes("application/x-www-form-urlencoded")]
public IActionResult Residential([FromForm] WorldPayResponseModel model)
{
    if (model == null || !ModelState.IsValid) return BadRequest("No data was present");    

    // ----- removed from brevity ----- //

    return Ok(true);
}

Вы также можете добавить DataAnnotations к свойствам, тогда в контроллере вы можете использовать ModelState.IsValid. Проверка модели в ASP.NET Core - полезный ресурс (он нацелен на страницы MVC/Razor, но проверка модели по-прежнему работает в API).

Вы, вероятно, можете безопасно удалить [FromForm] тоже.

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