什么原因导致参数为空?
我正在使用Asp.Net Core 2.0和web api来构建一个休息服务。除了HTTPPost之外,所有的工作都很好。什么原因导致参数为空?
[HttpPost("LoginUser")]
public IActionResult LoginUser(LoginUser loginUser)
{
return Ok(loginUser);
}
loginUser始终为空。我与小提琴手的测试,我的路线是http://localhost:53250/api/User/LoginUser
而且身体
{"EmailAddress":"[email protected]","Password":"123456789"}
提琴手命中链接就好了,但有效载荷始终为空。
我也曾尝试
[HttpPost("LoginUser")]
public IActionResult LoginUser([FromBody] LoginUser loginUser)
{
return Ok(loginUser);
}
在这种情况下,不打功能。
这是LoginUser定义:
public class LoginUser
{
public string EmailAddress { get; set; }
public string Password { get; set; }
}
什么想法?
问题已解决。当我添加我的UserController时,我做了一个类并从控制器派生。我删除它,并添加它作为一个新的项目,并选择web api核心控制器。现在所有的工作都很好。谢谢你的帮助。
JSON解析区分大小写。你的JSON是错误的。 应为:{“EmailAddress”:“[email protected]”,“密码”:“123456789”}。
对不起,我从visual studio中复制了转换。这里是我从小提琴手发送的内容:{“EmailAddress”:“[email protected]”,“密码”:“123456789”}。 –
你的动作应该是:
[Route("api/[controller]")]
public class UserController : Controller
{
[HttpPost("LoginUser")]
public IActionResult LoginUser([FromBody] LoginUser loginUser)
{
return Ok(loginUser);
}
}
见,[HttpPost("LoginUser")]
影响必经之路,不涉及到LoginUser
对象类型。
更新:您需要[FromBody]
作为ASP.NET Core model binding默认情况下会查看[FromForm]
绑定源。并且[FromBody]
属性指示您要将参数绑定到请求正文中的数据。
更新2:您还应该添加Content-Type: application/json
标题来请求。 ASP.NET Core根据此标题选择输入格式化程序。
更新3:如果您确实需要将原始数据作为原始字符串,请查看ASP.NET Core MVC : How to get raw JSON bound to a string without a type?。它建议使用[FromBody] dynamic data
如果您的请求模型中的属性设置为
{get; private set;}
,则值将不会填充。通过删除private
来公开它们。也没有使用构造函数 。如果您正在从正文中读取纯文本,请参阅
[FromForm]
的工作原理。
本地测试,它的工作原理。测试邮差,选择邮政,身体 - >原始和键入JSON,它为我工作 – hardkoded
也注意到你的行动不应该'无效'。返回'IActionResult' – Nkosi
与邮递员相同的结果。你在使用核心2.0吗? –