1

我有一个看起来有点像这样的方法:

/// <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);
}

当我使用邮递员发送一些数据时,它始终为空。

在此处输入图像描述

有谁知道为什么会这样?

4

1 回答 1

0

为要发布的数据创建一个模型/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]

于 2019-11-14T23:00:42.293 回答