我正在使用Asp.Net Core 2.0和web api来构建休息服务。除HTTPPost外,一切正常。
[HttpPost("LoginUser")]
public IActionResult LoginUser(LoginUser loginUser)
{
return Ok(loginUser);
}
loginUser始终为null。我正在用小提琴手测试,我的路线是http://localhost:53250/api/User/LoginUser
身体是
{"EmailAddress":"[email protected]","Password":"123456789"}
Fiddler点击链接很好,但有效负载总是为空。
我也试过了
[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; }
}
有任何想法吗?
你的行动应该是:
[Route("api/[controller]")]
public class UserController : Controller
{
[HttpPost("LoginUser")]
public IActionResult LoginUser([FromBody] LoginUser loginUser)
{
return Ok(loginUser);
}
}
请参阅,[HttpPost("LoginUser")]
仅影响路线,与LoginUser
对象类型无关。
更新:你需要[FromBody]
作为ASP.NET核心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
JSON解析区分大小写。你的JSON是错误的。应为:{“EmailAddress”:“[email protected]”,“密码”:“123456789”}。
问题已经解决。当我添加我的UserController时,我这样做了一个类并从控制器派生。我删除了它并将其添加为新项目并选择了web api核心控制器。现在一切正常。谢谢你的帮助。
{get;
private set;}
,则不会填充值。通过删除private
将它们公之于众。也没有使用构造函数。[FromForm]
是否有效。