c# .net core web api x-www-form-urlencoded 参数始终为空
c# .net core web api x-www-form-urlencoded parameter is always null
我有这个方法,看起来有点像这样:
/// <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);
}
当我使用邮递员发送一些数据时,它总是为空。
有人知道为什么会这样吗?
为要发布的数据创建一个model/DTO,.net core 应该处理绑定(Model Binding in 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,然后在controller中你可以使用ModelState.IsValid
。 Model validation in ASP.NET Core 是一个有用的资源(它针对 MVC/Razor 页,但模型验证仍然适用于 API)。
您也可以安全地删除 [FromForm]
。
我有这个方法,看起来有点像这样:
/// <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);
}
当我使用邮递员发送一些数据时,它总是为空。
有人知道为什么会这样吗?
为要发布的数据创建一个model/DTO,.net core 应该处理绑定(Model Binding in 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,然后在controller中你可以使用ModelState.IsValid
。 Model validation in ASP.NET Core 是一个有用的资源(它针对 MVC/Razor 页,但模型验证仍然适用于 API)。
您也可以安全地删除 [FromForm]
。