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]
тоже.